Skip to content

jymot/MV2Build

Repository files navigation

MV2Build

打包使用 V2 签名,使用前请确保设置 V2。

Gradle:

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": {}
      }
    ]
  }
}
  1. manifest 配置该配置,会修改lklBuild中配置的manifestFile文件中的<meta-data>节点,依据配置的key-value<meta-data>节点中查找android:name等于key的节点,并将其android:value设置为value。注意,如果value中包含{date},会被替换为yyyyMMdd-HHmmss的时间格式化。

  2. 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目录,执行相应的任务就可以了。

参考致谢