多渠道打包工具
packer-ng,新一代打包神器,可在1秒内打100个包。https://github.com/mcxiaoke/packer-ng-plugin
集成方法:
1. 在项目根目录的build.gradle中添加classpath。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.mcxiaoke.gradle:packer-ng:1.0.9'
}
}
2. 修改需要打包的module的build.gradle文件
保证signingConfigs中,当adrid gralde plugin >= 2.2.0时,设置v2SigningEnabled false
指定输出apk目录时,project表示当前编译的模块,如app module。
指定输出文件名时,appName表示当前编译模块名,flavorName表示市场名,fileMD5表示输出文件的MD5值。
apply plugin: 'packer'
android {
signingConfigs {
debug {
v2SigningEnabled false
}
release {
// 满足下面两个条件时需要此配置
// 1. Gradle版本 >= 2.14.1
// 2. Android Gradle Plugin 版本 >= 2.2.0
// 作用是只使用旧版签名,禁用V2版签名模式
// https://github.com/mcxiaoke/packer-ng-plugin/blob/master/compatibility.md
v2SigningEnabled false
}
}
}
packer {
checkSigningConfig = true
checkZipAlign = true
// 指定渠道打包输出文件名格式
archiveNameFormat = '${appName}-${flavorName}-${buildType}-${versionName}-${versionCode}-${fileMD5}'
// 指定渠道打包输出目录
archiveOutput = file(new File(project.buildDir.path, "apks"))
}
dependencies {
compile 'com.mcxiaoke.gradle:packer-helper:1.0.9'
}
3. 输出市场列表写在markets.properties文件中。一行表示一个市场,注释以#开头。在gradle.properties中通过market=markets.properties指定packer工具使用的市场列表所在的配置文件。
4. packer-ng不能通过product-flavor配置manifest,所以,友盟指定appkey和channelid的操作在程序的启动代码中完成,如下。
其中,market即为市场名,或productFlavor,或channelId。后面的代码是在代码中为友盟打定appkey和channelId的操作。
// 如果没有使用PackerNg打包添加渠道,默认返回的是""
// com.mcxiaoke.packer.helper.PackerNg
String market = PackerNg.getMarket(application);
// 或者使用 PackerNg.getMarket(Context,defaultValue)
// 之后就可以使用了,比如友盟可以这样设置
//AnalyticsConfig.setChannel(market);
//最新的key 54c9aec9fd98c515f70006cd
MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(application, "54c9aec9fd98c515f70006cd", market);
MobclickAgent.startWithConfigure(config);
5. 注意,使用packer-ng打包工具时,不再需要在build.gradle中指定productFlavor、指定flavor输出文件名、指定flavor输出到manifest meta-data中。
6. packer-ng工具的使用。
一:在相应的可运行模块中,执行gradle clean, gradle apkRelease,即可编译,生成的apk会自动输出到build.gradle中配置的路径中。这种情况下,只会编译当前模块,不会编译其它可运行模块。
二;在工程根目录中,执行gradle clean, gradle apkRelease,会编译工程中所有应用pack-ng的可运行模块,生成的apk会分别输出到各自配置的路径中。