快速打包插件 packer-ng-plugin 使用心得
首先放出这个工具的Github地址:https://github.com/mcxiaoke/packer-ng-plugin 在这个工具里面,作者已经非常详细的介绍了该如何使用这个打包工具,在此我主要记录一下我使用这个打包工具的过程。
导入依赖库文件
这个工具导入依赖库文件有两个地方
- 在项目的根目录中的
build.gradle
添加依赖
buildscript {
......
dependencies{
// add packer-ng
classpath 'com.mcxiaoke.gradle:packer-ng:1.0.7'
}
}
- 在APP中的
build.gradle
添加依赖
apply plugin: 'packer'
dependencies {
compile 'com.mcxiaoke.gradle:packer-helper:1.0.7'
}
android {
//...
signingConfigs {
release {
// 同时满足下面两个条件才需要此配置
// 1. Gradle版本 >= 2.14.1
// 2. Android Gradle Plugin 版本 >= 2.2.0
// 作用是只使用旧版签名,禁用V2版签名模式
// 兼容7.0版本的Android系统才需要,否则不需要
v2SigningEnabled false
}
}
}
这里有个非常重要的信息大家要注意一下,就是packer-helper:1.0.7
和packer-ng:1.0.7
这两个地方的版本号一定要保持一致##
- 在APP的
build.gradle
中配置签名信息
signingConfigs {
release {
storeFile file("D:/keystore/release.keystore")
storePassword "release"
keyAlias "release123"
keyPassword "release123"
}
debug {
//debug 的签名信息
}
}
- 在APP的
build.gradle
中添加buildTypes
buildTypes {
release {
......
//这里是配置签名的关键信息
signingConfig signingConfigs.release
}
debug {
......
//这里是配置签名的关键信息
signingConfig signingConfigs.debug
}
}
以上的工作完成之后,我们的配置基本上就完成了,但是这个工具的作者在文档的最后说了
- 注意事项
不支持productFlavors中定义的条件编译变量,不支持修改AndroidManifest
如果你的项目有多个productFlavors,默认只会用第一个flavor生成的APK文件作为打包工具的输入参数,忽略其它flavor生成的apk,代码里用的是 theVariant.outputs[0].outputFile。如果你想指定使用某个flavor来生成渠道包,可以用 apkFlavor1Release,apkFlavor2Beta这样的名字,示例(假设flavor名字是Intel):./gradlew -Pmarket=markets.txt clean apkIntelRelease
注意事项中给我们说明了两件事情:
- 不支持
productFlavors
中定义的条件编译 - 不支持修改
AndroidManifest
文件
那么这个时候就会有个问题,如果我们需要多渠道打包怎么办?
多渠道打包
首先在项目的根目录中添加一个markets.txt
文件,文件中每一行表示一个渠道,这个工具会自动识别空行和不符合规定的行,每一行的渠道
和注释
之间用#隔开,但是也可以没有注释,比如我可以在markets.txt
中进行如下定义:
Google#google channel
Baidu#baidu channel
Test
在进行了如上的定义之后,我们就可以进行多渠道打包,多渠道打包时我个人还是比较喜欢用Gradle
来进行打包,在项目的根目录中执行Gradle
命令行:
gradlew -Pmarket=markets.txt clean apkRelease
但是这个时候如果我们有对友盟的配置,就不能使用友盟官方SDK文档中推荐的方法,友盟官方推荐的方法是在AndroidManifest中设置各种配置信息,但是因为这个工具的限制,我们需要在代码中进行配置.
配置友盟的多渠道信息
首先我们在程序的入口处,一般都是ApplicationMain
中的onCreate()
中进行如下的配置:
private static final String APP_KEY = "YOUR_APP_KEY";
private MobclickAgent.UMAnalyticsConfig mUMAnalyticsConfig;
@Override
public void onCreate() {
super.onCreate();
setChannelID();
}
private void setChannelID() {
final String channelID = PackerNg.getMarket(this);
mUMAnalyticsConfig = new MobclickAgent.UMAnalyticsConfig(this, APP_KEY, channelID);
MobclickAgent.startWithConfigure(mUMAnalyticsConfig);
}
当然最后别忘记在AndroidManifest.xml
的application
结点中加上android:name=".Application.ApplicationMain"
进行了以上的所有设置之后,我们就可以享受光速打包了,根据我亲测,打50个包的速度是1分钟左右,这一分钟包括检查插件和编译信息等等.其实开始打第0个包到第49个包大概是10多秒钟吧。