零散的摸索了4,5天走了不少弯路,主要是gradle自身版本对应不同配置,新版本资料实在太少,走过来能跑通真的是要泪奔了,特记录下,大家少走弯路。
使用的版本:
引用
gradle-1.11
jdk7.0
eclipse Juno
项目结构:
引用
-game
---module1
---module2
game下主要有三个文件
1. local.properties
sdk.dir=E:\\adt-bundle-windows-x86_64-20130917\\sdk
2. settings.gradle
include ':module1' include ':module2' //指定子模块module1和module2的相对路径 project(':module1').projectDir = new File(settingsDir, '../module1Path') project(':module2').projectDir = new File(settingsDir, '../module2Path')
3. build.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.9.+' } } apply plugin: 'android' dependencies { compile project(':module1') compile project(':module2') } android { compileSdkVersion 19 buildToolsVersion "19.0.3" //签名 signingConfigs { myConfig { storeFile file("xxx") //签名文件 storePassword "xxxx" keyAlias "xxxx" keyPassword "xxxxx" //签名密码 } } buildTypes{ release { signingConfig signingConfigs.myConfig //代码混淆--集成了Proguard,配置文件proguard.cfg网上有很多参考,我就不贴了 //注:我把某个jar包混淆了导致程序一直闪退 //开始以为是so文件加载失败,这个问题找了一天才找到 泪奔... runProguard true proguardFile 'proguard.cfg' } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } //批量打包--指定配置文件 //不同的渠道商对应的各自AndroidManifest //AndroidManifest的application标签只用配置渠道号的值 //其他公共配置都放在公共的AndroidManifest.xml中 selfTest { manifest.srcFile 'product/AndroidManifest_selfTest.xml' } MMstore { manifest.srcFile 'product/AndroidManifest_MMstore.xml' } instrumentTest.setRoot('tests') } //批量打包--声明 productFlavors { selfTest { //这里可以配置不同的包名 } MMstore { } } lintOptions { abortOnError false // if true, only report errors ignoreWarnings true } //加载so文件 task copyNativeLibs(type: Copy) { from fileTree(dir: 'libs', include: '**/*.so' ) into 'build/native-libs' } tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs } clean.dependsOn 'cleanCopyNativeLibs' tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniFolders = new HashSet() pkgTask.jniFolders.add(new File(projectDir, 'build/native-libs')) } }
子Module的build.gradle很简单,我就贴一个出来就好:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.9+' } } apply plugin: 'android-library' 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'] } instrumentTest.setRoot('tests') } lintOptions { abortOnError false // if true, only report errors ignoreWarnings true } }
打包之前先
引用
gradle check
检查一遍,有问题就在build/link-result.html查看异常详情,里面的信息很详细。
check没有问题就直接打包,执行命令
引用
gradle clean build
几分钟后apk包就打好放在build/apk目录下面了