多渠道打包工具
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会分别输出到各自配置的路径中。