一、前言
  android客户端开发进入尾声,负责SEO同事突然发给我一个涉及45个发布渠道的噩耗,之前只发布自有渠道的工作方式(手动修改参数打包)已经不满足需求,所以引入最近比较流行的gradle打包技术。
  gradle基于groovy语言,引入的原因也方便了以后从现在使用的eclipse开发环境迁移到Android Studio,所以blablabla……,不多说了,先上干货。 二、准备工作
  1、首先,如果使用eclipse作为开发环境,需右键点击项目,在菜单中选择“Export…”
  2、然后,在弹出的列表中依次选择“Android->Generate Gradle build files”
  3、选择"Next>"
  4、再选择"Next>"
  5、在列表中勾选需要创建gradle配置脚本的项目,继续"Next>"
  6、选择"Finish"
至此,eclipse中已生成gradle配置脚本,可能这是需要右键刷新一下项目 三、简单项目Gradle打包脚本配置
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
//项目配置版本号,与apk输出目录
ext.appVersionCode = 2
ext.appVersionName = "2.0"
ext.appReleaseDir = "/Users/freedoms/Desktop/release" apply plugin: 'com.android.application' //获取时间戳
def getDate() {
def date = new Date()
def formattedDate = date.format('yyyyMMdd')
return formattedDate
} //程序包配置
android {
compileSdkVersion 19
buildToolsVersion "21.1.2" sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']    //项目中含有so包,需增加jni相关目录配置,否则程序运行到调用so时将发生错误
jniLibs.srcDir(['libs'])
} instrumentTest.setRoot('tests') debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
//打包开始时,lint运行将有可能发生错误,当有异常发生时,此设置将忽略警告,继续运行脚本,若忽略,打包过程将被强行终止
lintOptions {
  abortOnError false
}
  //签名配置
signingConfigs {
myConfig {
storeFile file("/Users/freedoms/Desktop/产品需求文档/android.keystore")
storePassword "123123"
keyAlias "android.keystore"
keyPassword "123123"
}
}  //混淆配置
buildTypes{
release {
signingConfig signingConfigs.myConfig
          //不需混淆设置为false
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}   //自定义配置
productFlavors {
//百度
baidu{
          //AndroidManifest.xml配置中定义的占位符补全配置,实例中在AndroidManifest.xml中配置"${UMENG_CHANNEL_VALUE}",脚本运行后,将baidu_android_channel自动替换到此位置,AndroidManifest.xml其他需要分渠道动态配置的参数可以参考此做法操作
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"baidu_android_channel",BAIDU_CHANNEL_VALUE:"baidu_baidu_android_channel"]
}
//360
"360"{//若配置渠道名为数字开头,必须加引号
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"360_android_channel",BAIDU_CHANNEL_VALUE:"baidu_360_android_channel"]
}
       //可参考以上两项进行扩展……
}    //打包重命名算法,输出XXX_Android_v2.0_20160127_baidu.apk到脚本前配置的输出目录当中
android.applicationVariants.all { variant ->
def file = variant.outputFile
if(variant.buildType.name.equals('release')){
variant.outputFile = new File(appReleaseDir + '/','XXX_Android_v' + appVersionName +getDate()+ '_' + variant.productFlavors[0].name + '.apk')
}
}
} //编码配置
tasks.withType(Compile) {
options.encoding = "UTF-8"
}
四、带有项目依赖关系的gradle打包脚本配置
1、依赖项目
  a)如果使用eclipse作为开发环境,首先需要生成gradle配置脚本(详见二、准备工作)
  b)修改gradle脚本中apply plugin为以下配置
apply plugin: 'android-library'

   c)其他配置同主项目,可参考简单项目gradle脚本配置

 2、主项目

  a)如果使用eclipse作为开发环境,首先需要生成gradle配置脚本(详见二、准备工作)

  b)修改gradle脚本中apply plugin为以下配置

apply plugin: 'com.android.application'

  c)在主项目根目录下创建setting.gradle文本文件,用作引用依赖项目配置

//引入依赖项目名
include 'library'
include 'library_pullToRefresh'
//创建目录引用,最后引号中是依赖项目存放的绝对路径
project(':library').projectDir = new File('/Users/freedoms/git/library')
project(':library_pullToRefresh').projectDir = new File('/Users/freedoms/git/library_pullToRefresh')

  d)在主项目的build.gradle中增加以下配置

//依赖配置
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':library_pullToRefresh')
compile project(':library')
}
五、运行build脚本
  1、在命令行中cd 到主项目根目录下
  2、输入gradle clean执行(清理gradle生成的检查文件和打出的APK,可以不做,但是不保证中间是否会有什么奇怪问题,养成好习惯)
  3、输入gradle check执行(检查项目,根据渠道数量不同需要时间不同)
  4、输入gradle build执行(执行build脚本,开始打包,根据渠道数量不同需要时间不同,45个渠道大概需要1个多小时)
  5、检查主项目build.gradle配置的输出目录中,打好的渠道包已经在里面了 六、注意事项(待续)
  Q1:在执行check或者build时,可能会报如下错误
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lint'.
> Lint found errors in the project; aborting build. Fix the issues identified by lint, or add the following to your build script to proceed with errors:
...
android {
lintOptions {
abortOnError false
}
}
... * Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED

  A1:在build.gradle脚本中增加

    lintOptions {
abortOnError false
}

  Q2:根据渠道数量的多少,可能在打包时会报java虚拟机内存不足

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space
at com.sun.tools.javac.util.Position$LineMapImpl.build(Position.java:139)
at com.sun.tools.javac.util.Position.makeLineMap(Position.java:63)
at com.sun.tools.javadoc.DocCommentScanner.getLineMap(DocCommentScanner.java:438)
at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:512)
at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:550)
at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:804)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)
at com.sun.tools.javac.main.Main.compile(Main.java:353)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:115)

  A2:可减少一次打包的渠道数量,然后再打包另一部分渠道(曲线救国)


Gradle Android客户端程序打包(基于gradle 1.12版本验证通过)的更多相关文章

  1. Gradle Android客户端程序打包(基于gradle 2.10版本验证通过)

    一.前言 目前正在准备从eclipse开发环境向AndroidStudio迁移,提前过去探探路,不出所料,原来gradle脚本果然报错,无法运行,想想索性把本地的gradle一起升级到最新版本,毕竟1 ...

  2. 浏览器网页判断手机是否安装IOS/Android客户端程序

    IOS 原理如下: 为HTML页面中的超链接点击事件增加一个setTimeout方法. 如果在iPhone上面500ms内,本机有应用程序能解析这个协议并打开程序,则这个回调方法失效: 如果本机没有应 ...

  3. InnoSetup 客户端程序打包教程

    之前介绍过InstallShield打包工具,本文再介绍更加方便的打包工具Inno Setup Inno Setup相对来说,比InstallShield更容易使用,不需要在VS中创建项目,只要提供D ...

  4. 浏览器判断是否安装了ios/android客户端程序

    最近在做一个项目,该项目的前身是为mobile browser量身打造的一个网站.现在有这样一个需求: 当用户在用mobile browser浏览该网站的时候会点击一个按钮/超链接,通过这个按钮的点击 ...

  5. XiaomiPushDemo【小米推送集成,基于V3.6.12版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个Demo只是记录小米推送的集成,不能运行. 使用步骤 一.项目组织结构图 注意事项: 1.  导入类文件后需要change包名以 ...

  6. openfire的SSL双向认证增加android客户端证书库步骤

    过程 需要新制作PKCS12证书库.CER证书.转换为androidBKS证书,最后把客户端的CER证书导入进im服务器的私钥库client.truststore,然后替换原证书.   新证书生成步骤 ...

  7. Mosquitto-1.5在Linux上的安装以及Android客户端的实现

    一.关于MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的" ...

  8. 【转】Android Studio系列教程六--Gradle多渠道打包

    原文链接:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 由于国内Android市场众多渠道,为了统计每个渠道的 ...

  9. [转]Android Studio系列教程六--Gradle多渠道打包

    转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...

随机推荐

  1. PL/SQL 包头和包体

    包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量 变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令. 实例如下: CREAT ...

  2. 【转】C语言文件操作解析(三)

    原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...

  3. 易pc,1G容量以上的u盘,另外还要一台装了windows系统的电脑。

    一.硬件:易pc,1G容量以上的u盘,另外还要一台装了windows系统的电脑. 二.软件: 1.windows xp的安装包.考虑到易PC的硬盘容量,还是用精简版的吧,比如“Deepin XP Li ...

  4. 给大家推荐一款代替Visio的在线作图工具ProcessOn

    过去作图的时候一直都是在用visio,每一次换了电脑使用都要重新安装,这大家都知道,最头疼的就是激活问题,曾经因为激活问题我“找遍了”正个互联网,最后还没找到...从08年开始到现在,visio用了这 ...

  5. MySQL慢查询(一) - 开启慢查询

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态slow_q ...

  6. chrome devtools 实用快捷键

    Ctrl + O:查找资源,非常使用 Ctrl + Shift + C:切换审查元素模式与浏览器窗口模式 Ctrl + Shift + F:在源代码中搜索 Ctrl + G:跳转到指定行

  7. apache archiva安装教程

    1. 下载archiva standalone  http://archiva.apache.org/download.cgi 2. 解压,设置ARCHIVA_HOME 环境变量 3.为了防止冲突, ...

  8. Mina入门实例

    继续上一篇,这篇主要讲通过mina往B端发送消息.并接受消息,mina是一个网络通信框架,封装了javaNIO.简单易用.网上有非常多关于他的介绍,在此不赘述了. 如上篇所介绍,完毕功能,须要五个类: ...

  9. CentOS6.X 系统安装图文教程,超详细

    http://www.myhack58.com/Article/sort099/sort0102/2011/32363_7.htm

  10. 自定义View-6 状态按钮 滑动 点击

    View public class SwitchButton extends View implements OnClickListener, OnTouchListener {     privat ...