本文进行了编辑,原文地址:http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html
前言
android gradle的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是gradle 来构建项目, 下定决心把androidgralde构建项目的用户指南全部看完, 让不会用gradle 的人也用gradle构建android项目,让打包(注意,打包和构建是两码事)多版本android不再痛苦。最后,题外话:珍惜生命,远离 ant....
build.gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android' android { compileSdkVersion 17 } |
build.gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android' dependencies { } android { compileSdkVersion 17 buildToolsVersion "17" defaultConfig { minSdkVersion 8 targetSdkVersion 17 } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } instrumentTest.setRoot('tests') } } |
接着在命令行cd 到项目目录下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
signingConfigs { myConfig{ storeFile file("gradle.keystore") storePassword "gradle" keyAlias "gradle" keyPassword "gradle" } } buildTypes{ release { signingConfig signingConfigs.myConfig } } |
1 2 3 4 5 6 7 8 |
buildTypes{ release { signingConfig signingConfigs.myConfig runProguard true proguardFile 'proguard-android.txt' } } |
gradle clean
1 2 3 4 5 6 7 8 |
productFlavors { playstore { packageName='com.youxiachai.androidgradle.playstore' } hiapk { packageName='com.youxiachai.androidgradle.amazonappstore' } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } hiapk { manifest.srcFile 'hiapk/AndroidManifest.xml' } playstore { manifest.srcFile 'hiapk/AndroidManifest.xml' } instrumentTest.setRoot('tests') } |
1 2 3 |
dependencies { compile files('libs/android-support-v4.jar') } |
结语
至此,对于用android gradle 构建android应用程序,打包android程序,所需要的所有知识,在以上已经说明,只要你是认真看上面文章的,对于,如何打依赖于android library project的包,可以看附录提供的那个德国人写的例子,而对于build.gradle 里面的代码你需要把0.2, 改为0.4即 可。至于用gradle 运行android test case部分的教程,个人感觉写了也白写(我写过关于andorid 测试相关的文章,也录制过视频,所以有这个感觉。),估计不会有人关注,所以,如果你对用gradle 进行android test的话,可以看附录里面提供的官方gradle手册。
扩展阅读 Property name |
Default values for debug |
Default values for release / other |
debuggable |
true |
false |
jniDebugBuild |
false |
false |
renderscriptDebugBuild |
false |
false |
renderscriptOptimLevel |
3 |
3 |
packageNameSuffix |
null |
null |
versionNameSuffix |
null |
null |
signingConfig |
android.signingConfigs.debug |
null |
zipAlign |
false |
true |
Property Name |
Default value in DSL object |
Default value |
versionCode |
-1 |
value from manifest if present |
versionName |
null |
value from manifest if present |
minSdkVersion |
-1 |
value from manifest if present |
targetSdkVersion |
-1 |
value from manifest if present |
packageName |
null |
value from manifest if present |
testPackageName |
null |
app package name + “.test” |
testInstrumentationRunner |
null |
android.test.InstrumentationTestRunner |
signingConfig |
null |
null |
runProguard |
false |
false |
proguardFile |
'proguard-android.txt' or 'proguard-android-optimize.txt' |
'proguard-android.txt' or 'proguard-android-optimize.txt' |
最后的吐槽
吐槽一下。。。用ant脚本的(也许你没有接触过。。)。在以前你用ant脚本打包apk的时候需要打包不同包名,你需要用ant读取AndroidManifest.xml然后又正则匹配替换里面packagename参数。。虽然描述得过程很简单,你真去写的时候你就蛋疼了(对于一个ant外行人来说,个人感觉ant的学习曲线太陡峭了,如果是两年前的我,可能还写得 出这样的ant脚本(当年费了很大的功夫学习了一个多星期),不过,因为很少用到(后来知道maven了。。果断放弃了ant,为什么不在android 使用maven? 因为,android 的maven 插件式非官方的,而且现在看来maven 的xml实在很复杂,看起来就头疼))*