最近朋友推荐gradle,发现确实是个不错的打包工具,决定用它做项目管理,当然最主要的还是用到它的批量打包功能。
零散的摸索了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目录下面了
分享到:
相关推荐
Gradle打包 批量打包 android eclipse
Android批量打包gradle和python两种方式
androidstudio工程已经实现从外部读取渠道号批量打包 外部library依赖
关于gralde的使用总结博客链接: 使用方法: 创建channel.txt,在其中输入渠道号名称以及渠道的数字,规则参考示例文件。需要说明一下的是,product flavor的是通过...打包脚本会在执行的时候会根据从channel.txt中读
用 Android Studio 批量打渠道包的工程示例,主要看 build.gradle的写法就好,工程基于Gradle 2.2.1、Android Plugin 1.2.3,如果没有或者不是对应 Gradle的童鞋,可以先改配置再打开,可以节省下载 Gradle时间,...
Android-Batch-Pack 是实现批量打包apk的工具,适用于包含了第三方library project的project,并且不影响project的代码混淆,每次打包自动修改用于统计的渠道标签(如友盟统计的channel tag)。目前只是用于windows...
解决android apk的批量打包,支持渠道号替换或者服务器地址替换(字符串替换)、资源替换、指定文件修改、修改包名 轻量级: 使用shell脚本编写,方便开发者修改实现逻辑 基于gradle打包apk 使用说明 注: 需要依赖...
一、批量打包 1、集成了友盟统计,并在AndroidManifest.xml中添加了如下代码 <meta-data android:name=UMENG_CHANNEL android:value=${CHANNEL_VALUE}/> 2、在app的build.gradle的android标签下添加如下代码...
所有就写了一个简单的Python脚本来进行一次性批量打包。 ###安装Python环境内容不再多余描述,可参见网上教程。我使用的是Python3。 ###以下是详细代码,可参见注释进行配置。 #! python3 # 替换代码和文件,所...
每次应用启动(调用initialize方法)时候,会将上一次应用使用产生的数据记录打包上报。 UPLOAD_POLICY_INTERVAL 指定时间间隔上报。开发者可以指定从1分钟-60天之间的任意时间间隔上报数据记录。需要注意,由于...