gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)
近期一直在做android自己主动打包,之前已经完毕了用纯命令行的形式打包、原生态ant脚本打包。和基于android的SDK的打包。而且实现了多渠道打包,后来同事推荐了gradle,网上的资料说gradle各种好,自己也感兴趣是实现一下。事实上一般来说因为android对eclipse的支持减弱,大部分的人都是用gradle与android studio融合,这样面的样例也会比較多,但笔者所在的项目还是在eclipse的比較多。因为开发者在移植过程中发现报错比較多所以一直没有全然移植(好吧,事实上早晚会移植),所以笔者是用eclipse的IDE做的实验,以下先贴几个基础知识
首先是新建一个android项目,然后用自带的IDE生成gradle文件,详细參考http://blog.csdn.net/x605940745/article/details/41242687,有兴趣的同志们能够採取纯手写的方式,这样的方式能够不依赖IDE,所以会比較好
这个是原始的build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.8.+'
}
}
apply plugin: 'android' dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
} android {
compileSdkVersion 19
buildToolsVersion "19.0.3" sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
} // Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests') // Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
以下我先附上自己的build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
apply plugin: 'android' ant.importBuild 'build.xml' //这里导入了ant的脚本 dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
} android {
compileSdkVersion 19
buildToolsVersion "20.0.0" signingConfigs { //签名,这里的文件名称和password是错的,后面还会有从外部导入的语句
myConfig {
//绝对路径和相对路径都能够
storeFile file("E:\\keystore\\mydemo.keystore") //签名文件
storePassword "276021750" //password
keyAlias "mydemo.keystore"
keyPassword "111"
}
} buildTypes{
release { //这里就是用来生成apk的步骤。详细看备注
//1.加入签名
signingConfig signingConfigs.myConfig
//2.runProguard 运行混淆代码
runProguard true
//混淆规则文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
} productFlavors { //这里是多渠道的地方,AndroidManifest.xml文件中面要有标示,以下会贴文件
yingyongbao {
manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]
}
umeng {
manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]
}
wandoujia {
manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]
}
} allprojects { //在这里是外部导入文件,然后更改本身文件的属性。这里仅仅改了签名,还能够改其它的
afterEvaluate { project ->
def propsFile = rootProject.file('E:\\keystore\\keystore.properties')
def configName = 'myConfig' if (propsFile.exists() && android.signingConfigs.hasProperty(configName)) {
def props = new Properties()
props.load(new FileInputStream(propsFile))
android.signingConfigs[configName].storeFile = file(props['storeFile'])
android.signingConfigs[configName].storePassword = props['storePassword']
android.signingConfigs[configName].keyAlias = props['keyAlias']
android.signingConfigs[configName].keyPassword = props['keyPassword']
}
}
} sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
} // Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests') // Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
这里的详细功能看备注就能够了,暴力的贴上去就没问题。以下要贴几个文件,一个是AndroidManifest.xml文件,里面就是加了一行
<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_NAME}" />
build.xml加入了一个target,用cmd命令写gradle deploy就能够运行里面的内容了
<target name="deploy">
<!-- <replaceregexp flags="g" byline="true">
<regexp pattern="public static final Host host = Host.Development;" />
substitution expression 中是替换的值。替换的值都定义在相相应的配置文件里
<substitution expression="public static final Host host = Host.Test;" />
fileset 属性中的 dir 用来指定被替换文件所在的文件夹
includes 用来指定要替换哪个文件。 <fileset dir="./src/net/xtion/crm/base" includes="CrmAppContext.java" />
</replaceregexp> -->
<replace encoding="utf-8" dir="./src/com/example/learn723">
<include name="MainActivity.java" />
<replacefilter token="public static final String host = "Host.Test";" value="public static final String host = "Host.abc";" />
</replace>
</target>
另一个签名文件
storeFile=E:\\keystore\\mydemo.keystore
storePassword=276021750
keyPassword=276021750
keyAlias=mydemo.keystore
详细demo能够在这下载
http://download.csdn.net/detail/killer1989/8927225
这种优点我们能够看到。用ant专职改文件的信息。这里专门做多渠道的打包,能够分开,事实上要做到全自己主动还有两步,一个是从svn自己主动获取。这个网上有非常多的版本号能够学习,还有一个是用脚本改动build.gradle文件,动态变换签名(事实上也能够做批量改动)和动态添加这些功能的代码,能够用shell,能够用python,各位用须要能够试一下
gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)的更多相关文章
- Gradle实现的两种简单的多渠道打包方法
本来计划今天发Android的官方技术文档的翻译--<Gradle插件用户指南>的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了. 今天就说一下使用Gradle进行类似友盟这 ...
- Android学习探索之App多渠道打包及动态添加修改资源属性
前言: 关于Android渠道打包是一个比较老的话题,今天主要记录总结一下多渠道打包以及如果动态配置修改一些资源属性.今天以公司实际需求为例进行演示,由于项目复用很多公共的业务组件,而且业务组件之间的 ...
- Android之友盟多渠道打包与数据统计
文章大纲 一.多渠道打包与数据统计介绍二.友盟实现多渠道打包实战三.友盟数据统计实战四.项目源码下载五.参考文章 一.多渠道打包与数据统计介绍 多渠道打包,相信很多同学都知道.在Android ...
- 更便捷的Android多渠道打包方式
本文先回顾了以往流行的多渠道打包方式,随后引入的mcxiaoke的packer-ng-plugin项目,介绍该项目在实际应用(配合友盟统计)中如何解决更方便的Android多渠道打包问题 多渠道打包方 ...
- 通过ant脚本编译打包android工程
通过ant脚本,编译打包android工程 1.Android程序编译.打包.签名.发布的三种方式: 方式一:命令行手动编译打包 方式二:使用ant自动编译打包 方式三:使用eclipse+AD ...
- Gradle 实现 Android 多渠道定制化打包
Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...
- Gradle for Android(三)多渠道打包、配置签名信息
多渠道打包 国内有太多Android App市场,每次发版几十个渠道包.还好Android Gradle给我们提供了productFlavors,我们可以对生成的APK包进行定制. productFl ...
- Android Studio 使用Gradle多渠道打包
第一步:配置AndroidManifest.xml 以友盟渠道为例,渠道信息一般都是写在 AndroidManifest.xml文件中,大约如下: <meta-data android:name ...
- 【转】Android Studio系列教程六--Gradle多渠道打包
原文链接:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 由于国内Android市场众多渠道,为了统计每个渠道的 ...
随机推荐
- android fragment轻松监听返回键/Fragment中的popupwindow响应返回键隐藏
现在的开发我们基本上都是一个主activity中放多个fragment,点击返回按钮的时候,直接退出主activity,但是我们在fragment中经常会弹出例如popupWindow这样的布局,用户 ...
- UltraEdit(UE)window破解方法
安装UltraEdit(一路下一步,无难点)成功后,打开软件弹出如下使用模式提示信息. 关掉UltraEdit软件,同时 断本机网络.重新打开UltraEdit软件: 点击[输入许可证密 ...
- SQl基本操作——try catch
begin try ... end try begin catch ... end catch
- [Windows Server 2008] Ecshop安全设置
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:ECSHO ...
- SYN(synchronous)TCP/IP
SYN(synchronous)是TCP/IP建立连接时使用的握手信号.在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息, ...
- PHP 数据库连接 (Mysql Mysqli PDO)
1.PHP与Mysql扩展(本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除),PHP原生的方式去连接数据库,是面向过程的 <?php $mysql_conf = array( 'hos ...
- Django - 一对多创建
1.新创建一个app python manage.py startapp app01 2.在django的setting.py中,填加新增的app名称 3.在app01的models.py中,添加代码 ...
- 【原创】使用JS封装的一个小型游戏引擎及源码分享
1 /** * @description: 引擎的设计与实现 * @user: xiugang * @time: 2018/10/01 */ /* * V1.0: 引擎实现的基本模块思路 * 1.创建 ...
- DFA最小化实例
原始DFA如下图所示 最小化的定义:1.没有多余的状态(死状态):2.没有两个状态是相互等价的: 两个状态等价的含义:1.兼容性(一致性)——同是终态或同是非终态:2.传播性(蔓延性)——从s出发读入 ...
- hadoop-hdp-ambari离线安装记录
一.系统准备 1. 创建user——ambari 2.关闭防火墙 redhat6: chkconfig iptables off /etc/init.d/iptables stop redhat7: ...