前段时间写一个项目,一套软件为不同的客户服务,每一个客户都对应一个软件,有不同软件名字logo,欢迎页面,服务器信息等,但是除这些之外的页面都是一样的.刚开始的想法是为每一个客户都建立一个Git分支,再建一个开发的分支用来合并新的开发的修复代码.打包的时候,我就傻了,每一个就要分别打包,特别特别麻烦.因为客户的数量也是不少的,每一次更新打包都需要花费几个小时,80%都是在等待AndroidStudio编译打包的进度条,真是呵呵了
后来发现的gradle的多渠道打包功能,只要配置好ProductFlavor,一切都是那么简单~内心是欢呼雀跃的,不说废话了,开始进入正题~
这里我们需要明白需求:
一个项目打包成多个具有不同签名,不同包名,Logo,软件名称的apk
而这些东西分别位于Android项目文件目录的哪些地方?
1.包名-------------------AndroidManifest.xml
2.软件名称-------------res/values/string.xml/app_name
3.软件logo-------------res/mipmap--XXXX
4.签名文件-------------这个因为我一般是用AndroidStudio -bulid-Generate Signed apk打包的时候调用签名文件
我们怎么能把这些东西一一对应起来呢,答案是----gradle内配置,具体怎么配置,我们下面分别来讲.
使用alpplicationId替代包名
这里我们使用productFlavors配置,这是是专门用来定制每个apk的各种信息的,这里我们演示就是定义了包名 applicationId.这个名字可以自定义.
这个名字我们在这里定义,后面会用到.
//多包名设置
productFlavors {
flavor_naruto {
applicationId = "com.dr.naruto"
}
flavor_kakaxi {
applicationId = "com.dr.kakaxi"
}
flavor_zilaiye {
applicationId = "com.dr.zilaiye"
}
flavor_sidai {
applicationId = "com.dr.sidai"
}
}
1.在main文件夹所在的目录,建立和main文件夹同级的文件夹,名称就是我们上一步productFlavors中定义的,在这里我们就用上了,例如建一个flavor_kakaxi
2.要替换app_name和ic_launcher,在定义好的flavor_kakaxi文件夹中,构建这两个文件的目录结构,一定要保证和main文件夹中是相同的,因为编译apk的时候,就是用flavor_kakaxi替换main来找这个文件,所以要保证路径相同
main\res\mipmap\ic_launcher
flavor_kakaxi\res\mipmap\ic_launcher
(1)创建或者选择已有的签名文件
(2)选择要打包的ProductFlavor,就是我们在第一步中配置好的名称,对应的是不同的包名
在build.gradle中定义SignConfigs,里面配置各个签名信息
//签名配置
signingConfigs {
//签名1
dr_sign1 {
keyAlias 'dr'//别名
keyPassword 'aaaaaa'//别名密码
storeFile file('D:/Android/dr_sign1.jks')//签名文件路径
storePassword 'aaaaaa'//签名密码
}
//签名2
dr_sign2 {
keyAlias 'dr'//别名
keyPassword 'bbbbbb'//别名密码
storeFile file('D:/Android/dr_sign2.jks')//签名文件路径
storePassword 'bbbbbb'//签名密码
}
//...你可以配置多个
}
在build.gradle的BulidType配置打包的参数
//打包设置
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
dr_sign1_buildType {
debuggable false
jniDebuggable false
minifyEnabled false
zipAlignEnabled true
signingConfig signingConfigs.dr_sign1//配置签名文件
}
dr_sign2_buildType {
debuggable false
jniDebuggable false
minifyEnabled false
zipAlignEnabled true
signingConfig signingConfigs.dr_sign2//配置签名文件
}
}
在gradle窗口(一般在AndroidStudio 的窗体右侧)选择想要打包的签名文件
附上源码:http://download.csdn.net/detail/qq_32452623/9666166
每一次解决问题都要感谢一下那些分享知识,技术和经验的万能的网友们~
参考文章:Gradle实现Android多渠道定制化打包
参考文章:Android Studio 使用Gradle打包版本的Apk-bulidTypes和ProductFlavors