Android build
打包使用 V2 签名,使用前请确保设置 V2。
Add MV2Build as a dependency in your main build.gradle in the root of your project:
buildscript {
dependencies {
classpath 'im.wangchao:v2-build-plugin:0.2.1'
}
}
compile 'im.wangchao:build-helper:0.2.1'
implementation
代替 compile
在主工程build.gradle
文件中添加如下代码:
apply plugin: 'im.wangchao.build'
mV2Build{
/**
* 渠道配置文件
*/
configFile = new File("${project.getProjectDir()}/mV2Build/config.json")
/**
* 需要清除渠道的 APK。如果配置该项,那么会有 clearChannel Task 提供使用,
* 该 Task 会请空指定 APK 的渠道信息。
*/
clearChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-0.apk")
/**
* 需要打印渠道信息的 APK。如果配置该项,那么会有 printChannelInfo Task 提供使用。
*/
printChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-测试渠道1.apk")
/**
* 在打包前,需要最先执行的脚本,执行顺序由数组顺序决定。
* 数组的值为需要执行脚本的绝对路径。
* 注意脚本中,如果使用相对路径,那么该相对路径是相对于项目根目录的,也就是${project.getRootDir()}
*/
preBuildScript = []
/**
* Multi-Channel
*/
channel {
/**
* Multi-Channel 输出目录
*/
outputDir = new File("${project.buildDir}/outputs/channel")
/**
* 执行 assembleReleaseChannel Task 输出 APK 的文件格式,可以不设置,默认为${appName}-release-${channel}
*/
// apkFileNameFormat = '${appName}-release-${channel}-test.apk'
/**
* 需要写入渠道的 APK。如果配置该项,那么会有 onlyWriteChannel Task 提供使用,
* 该 Task 只是将已经打好的包根据配置文件,写入渠道。
*/
writeChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-0.apk")
/**
* AndroidManifest.xml 文件
*/
manifestFile = new File("${project.getProjectDir()}/src/main/AndroidManifest.xml")
/**
* 依赖的变种类型,可以不设置,默认为 release
*/
// buildType = "release"
}
}
然后需要创建一个渠道包的配置文件,也就是上面要用到的渠道配置文件,比如创建一个config.json
:
{
"manifest": [
{
"key": "Test",
"value": "V{date}"
}
],
"channel": {
"increment": false,
"incrementCount": 10,
"list":[
{
"alias": "测试渠道",
"channel": "test",
"extraInfo": {}
}
]
}
}
manifestFile
文件中的<meta-data>
节点,依据配置的key-value
在<meta-data>
节点中查找android:name
等于key
的节点,并将其android:value
设置为value
。注意,如果value
中包含{date}
,会被替换为yyyyMMdd-HHmmss
的时间格式化。channel
该配置用于assembleReleaseChannel任务,该任务主要用于打发布的渠道包。
properties
同上,和multiServer中的配置含义相同increment
是否打递增渠道包,也就是说渠道号从0开始递增incrementCount
递增渠道包的数量list
如果不打递增渠道包,那么打特殊渠道包,每一个item为一个渠道包alias
渠道别名channel
渠道号extraInfo
额外的配置获取渠道信息:
String channel = ApkInfoReader.getChannel(getApplicationContext());
获取别名:
String alias = ApkInfoReader.getAlias(getApplicationContext());
获取extraInfo
中的信息:
ChannelInfo info = ApkInfoReader.getChannelInfo(App.instance().getApplicationContext());
String result = info.getExtraInfo().get("自定义的key");
可以直接执行如下命令:
# 渠道发布包
gradle assembleReleaseChannel
如果不想执行命令,那么在Android Studio界面右侧,点击Gradle
,然后选择你的主工程,然后找到mv2build
目录,执行相应的任务就可以了。