Android打包利器Gradle之三板斧

当传统的手工打包方式遇上同一应用,多渠道/多包名及多种引导页/icon等等差异时,就变成了苦不堪言的纯体力活了。 但有了Gradle这一切不再是问题了,Gradle使得这一切变的so easy。

本遍主要介绍eclipse中使用Gradle打包解决多渠道问题,其它的问题基本差不多。在eclipse中使用Gradle只需要以下三板斧:

第一斧、生成Gradle相应文件

1.1 选中相应的项目,鼠标右键Export-GenerateGradle build files,然后一路next下去。

1.2 一路next下去后,finish后,即可生成以下目录及文件

在生成的文件中,有两个需要后续配置修改gradle-wrapper.properties及build.gradle文件,其它文件可以不动即可。

第二斧、下载gradle及配置相应的环境变量

2.1 双击打开gradle-wrapper.properties,复制出http://services.gradle.org/distributions的地址,访问此网站

2.2 下载相应的gradle版本,个人下载了2.1版本,找到且下载gradle-2.1-all.zip,修改上面的distributionUrl为

distributionUrl=http\://services.gradle.org/distributions/gradle-2.1-all.zip

2.3 配置gradle环境变化,将刚下载的zip包解压出gradle-2.1,分别配置GRADLE_HOME及在Path后追加路径

GRADLE_HOME配,指到gradle-2.1目录即可,这里为D:\Program Files\Android\gradle-2.1

Path指到bin目录中,这里为D:\Program Files\Android\gradle-2.1\bin

另外还需要配置ANDROID_HOME环境,在eclipse-preferences-Android中,找到SDK LOCATION

在环境配置中添加ANDROID_HOME的变量名,并指向与eclipse中的SDK LOCATION的路径一样即可.

配置好了,cmd检查下grade是否配置成了,输入gradle -w命令检查下。

第三斧、Gradle配置及打包命令生成

3.1 Gradle打包过程是比较慢,且比较耗内存特别是多版本多N渠道一起打包时也许可能出现OOM。可以通过在gradle-wrapper.properties文件中,添加org.gradle.jvmargs=-Xmx2048m-XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError

3.2 修改build.gradle------比较关键的配置文件,对多渠道/多包名及各种差异下的配置都在build.gradle文件下配置。

这里先上下个人demo项目中的配置,最后再对关键的地方进行解释。

----------------------------------------build.gradle文件开始-----------------------------------------

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath‘com.android.tools.build:gradle:0.14.+‘

}

tasks.withType(JavaCompile){ options.encoding = "UTF-8" }

}

apply plugin: ‘android‘

dependencies {

compile fileTree(dir:‘libs‘, include: ‘*.jar‘)

}

android {

compileSdkVersion 21

buildToolsVersion"21.1.2"

defaultConfig {

applicationId"com.test.drawdemo"

minSdkVersion10

targetSdkVersion 12

versionCode200

versionName"v2.0.5"

testApplicationId "com.test.drawdemo"

testInstrumentationRunner "android.test.InstrumentationTestRunner"

// 默认是offical的渠道,即官方的版本

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "offical"]

}

//app 签名文件

signingConfigs {

release {

storeFile file("demo.keystore")

storePassword "123456"

keyAlias "demo.keystore"

keyPassword "123456"

}

}

buildTypes {

release {

signingConfigsigningConfigs.release

// 不显示Log

buildConfigField "boolean", "LOG_DEBUG","false"

minifyEnabled true

proguardFiles ‘proguard-project.txt‘

}

}

// 移除lint检查的error

lintOptions {

abortOnError false

ignoreWarnings true

}

// 友盟多渠道打包

productFlavors {

offical {}

appchina {}

anzhi {}

mumayi {}

lenovo {}

qq {}

huawei {}

xiaomi {}

baidu {}

meizu {}

taobao {}

huijia360 {}

hiapk {}

}

productFlavors.all { flavor->

flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

//------------加载 so库开始------------

task copyNativeLibs(type:Copy) {

from(new File(‘libs‘)){ include ‘**/*.so‘ }

into newFile(buildDir, ‘native-libs‘)

}

tasks.withType(JavaCompile) {compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn‘cleanCopyNativeLibs‘

tasks.withType(com.android.build.gradle.tasks.PackageApplication){

pkgTask -> pkgTask.jniFolders =new HashSet<File>()

pkgTask.jniFolders.add(newFile(buildDir,‘native-libs‘))

}

//---------------加载 so库结束---------

sourceSets {

main {

manifest.srcFile ‘AndroidManifest.xml‘

java.srcDirs = [‘src‘]

resources.srcDirs = [‘src‘]

aidl.srcDirs = [‘src‘]

renderscript.srcDirs = [‘src‘]

res.srcDirs = [‘res‘]

assets.srcDirs = [‘assets‘]

}

}

}

----------------------------------------build.gradle文件结束-----------------------------------------

3.3 执行gradlewclean。打开cmd,cd到项目目录中,先输入gradlew clean。 这里的gradlew 是对gradle命令的包装,gradlew clean后可以使gradle会自成同步下载Gradle相应的依赖,并可以把上次打包的清掉重新打,会删除掉build目录及build目录下所有文件。

3.4 执行gradlew build命令,即可完成整个打包过程了。

接下来可以看到项目下产生了build目录,在这里的build-->outputs-->apk里就生成了各渠道的包了.

可以看到生成了一堆的包,有release及debug版本,签名版的及未签名。若不想要debugt版本的apk,可以在打包时输入 gradlew aR命令即可。aR是assembleRelease的简写。当然也可以只生成debug版本的(gradlew assembleDebug)

大功造成,怎么样是不是很easy啊,呵呵了。。。下面对build.gradle简单的介绍下。

补充说明--关于build.gradle配置

1. buildscript元素

除了dependencies-classpath中的gradle版本需要改下,基本上不需要修改。

1.1 dependencies {

classpath‘com.android.tools.build:gradle:0.12.+‘

}

gradle:0.12.+修改成gradle:0.14.+,对应的gradle 2.1 采用新的gradle版本,比较关键。

1.2 tasks.withType(JavaCompile) { options.encoding = "UTF-8" } ,这里老版本gradle是Compile,需要修改成JavaCompile

2、applyplugin: ‘android‘

-----不做修改

3、dependencies元素

dependencies{

compilefileTree(dir: ‘libs‘, include: ‘*.jar‘)

} 指定项目中相应的jar包依赖,注意 :

3.1 这里配置指令了,会和proguard混淆配置中-libraryjars libs/xxxx.jar冲突重新配置了依赖jar包。可以将proguard混淆文件中的-libraryjars 配置注释掉 加#-libraryjars ...

3.2 dependencies只指令了jar包依赖了,并没有指令so库依赖,so库的依赖得单独配置...,后面有介绍。。但有个变态的方法就是可以把所的so库文件,全部用zip压缩到一个文件中比如so.zip,再把so.zip改名成so.jar这样就不需要指令so库了,比较变态吧。呵呵....

4. android元素

这里是重重之重,配置比较繁琐,

4.1 defaultConfig元素

applicationId 指令包名,老版本是packageName指令

其它可配置版本信息

4.2 signingConfigs 元素

可以配置签名文件信息,文件位置别名命令等

4.3 buildTypes 元素

生成的apk有两种type类型,debug与release版本,可以分别对其配置,配置使用哪个签名配置(signingConfigs)、是否混淆等等

minifyEnabled 是新版本的元素,老版本runProguard已经废弃了。

proguardFiles ‘proguard-project.txt‘ 指令使用与build.gradle同一目录中的proguard-project.txt混淆文件.

4.4 lintOptions元素

配置下,忽略lint相应的警告...

4.5 Flavors机制,,

主要是靠,这个机制进行 多渠道,多包名的打包....,

剩下的加载 so库,直接复制下,不用改,拿好,不谢。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 18:26:26

Android打包利器Gradle之三板斧的相关文章

[原]Android打包之Gradle打包

最近尝试了一下Android的Gradle打包,发现确实比Ant打包会方便很多,特此记录下来. 注:android的gradle现在插件的版本已经是0.14.3了,对于一些老的方法和api,有一些已经被移除,无法使用(http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0),以下这些属性改名,原先的不能用: runProguard -> minifyEnabled (是否混淆) zipAlign -> zip

Android Studio之Gradle多渠道打包

Android Studio之Gradle多渠道打包 由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这事就简单了. 友盟多渠道打包 废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段: <meta-data android:name="UMENG_CHANNEL" android:value="Channel_ID&qu

Android 项目利用 Android Studio 和 Gradle 打包多版本APK

在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_api.com,release_api.com,dev_api.com等等. 不同的版本对应了不同的 api 域名,还可能对应不同的 icon 等. 如果每次都在打包前修改我们都手动来修改,这样实在是不够方便. 但如果我们使用了 Android Studio 和 Gradle,这个麻烦就可以轻松省去.

Android Ant 和 Gradle 打包流程和效率对比

一.Ant 打包:(下载ant.配置环境变量就不说了) 1.进入命令行模式,并切换到项目目录,执行如下命令为ADT创建的项目添加ant build支持: android update project -p . -t  "android-17" 2.build脚本默认target是help,所以会显示如上信息,修改target为debug或release就可以像无ant时一样编译.生成以及调试了. 3.使用release时  在local.properties添加签名信息 #keysto

android studio 使用gradle 导出jar包,并打包assets目录

最近项目在做一个sdk,供别的开发者使用,所以要求导出jar包. 与eclipse不同,android studio 1.0 没提供导出jar包的图形界面.需要结合gradle来生成jar包. 首先 需要设置module应用的gradle插件为 library 代码长这样: ? 1 <code class="hljs">apply plugin: 'com.android.library'</code> 这样,build的时候,android studio 1.

android Studio 使用gradle 参数解释及多渠道打包

Gradle 基本语法 build.gradle  buildscript { //设置脚本的运行环境 repositories {//支持java 依赖库管理(maven),用于项目的依赖 mavenCentral() } dependencies {//依赖包的定义.支持maven/ivy,远程,本地库,也支持单文件,如果前面定义了repositories{}maven 库,使用maven的依赖 //的时候只需要按照用类似于com.android.tools.build:gradle:2.1

android studio学习----gradle基础

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 安装Gradle 在Android Studio系列教程一--下载与安装中新建项目成功后会下载Gradle,貌似这个过程不FQ也是可以下载,但是访问特别慢,建议FQ下载.那么下载的Gradle到什么地方呢? Mac上会默认下载到 /Users/<用户名>/.gradle/wrapper/dists 目录 Win平台会默认下

RN在Android打包发布App

参考资料:http://www.jianshu.com/p/b8811669bcb6 RN在Android打包发布App 1-:生成一个签名密钥你可以用keytool命令生成一个私有密钥.在Windows上keytool命令放在JDK的bin目录中(比如C:\Program Files\Java\jdkx.x.x_x\bin),你可能需要在命令行中先进入那个目录才能执行此命令.在mac上,直接进入项目根目录输入一下命令: $ keytool -genkey -v -keystore my-rel

Build Android Project with Gradle

现在随着友盟这类统计工具在项目中集成,根据不同渠道打不同的APK包也成为日常工作之一.神马?你还在手动改渠道号一个一个打包?!那你一定是个非常勤奋的程序员- -!正好尝试使用Android Studio,稍微了解了下Android Studio的使用的构建工具:Gradle. 什么是Gradle 你可以看一下Gradle主页. 简单来说,Gradle是一个自动化编译部署测试工具.Gradle内容很广,还有专门的书介绍Gradle.而Android Studio使用的是Gradle中的一部分功能.