项目作者: jymot

项目描述 :
Android build
高级语言: Java
项目地址: git://github.com/jymot/MV2Build.git
创建时间: 2017-04-17T05:43:07Z
项目社区:https://github.com/jymot/MV2Build

开源协议:

下载


MV2Build

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

Gradle:

Add MV2Build as a dependency in your main build.gradle in the root of your project:

  1. buildscript {
  2. dependencies {
  3. classpath 'im.wangchao:v2-build-plugin:0.2.1'
  4. }
  5. }
  1. compile 'im.wangchao:build-helper:0.2.1'

implementation 代替 compile

如何使用

在主工程build.gradle文件中添加如下代码:

  1. apply plugin: 'im.wangchao.build'
  2. mV2Build{
  3. /**
  4. * 渠道配置文件
  5. */
  6. configFile = new File("${project.getProjectDir()}/mV2Build/config.json")
  7. /**
  8. * 需要清除渠道的 APK。如果配置该项,那么会有 clearChannel Task 提供使用,
  9. * 该 Task 会请空指定 APK 的渠道信息。
  10. */
  11. clearChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-0.apk")
  12. /**
  13. * 需要打印渠道信息的 APK。如果配置该项,那么会有 printChannelInfo Task 提供使用。
  14. */
  15. printChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-测试渠道1.apk")
  16. /**
  17. * 在打包前,需要最先执行的脚本,执行顺序由数组顺序决定。
  18. * 数组的值为需要执行脚本的绝对路径。
  19. * 注意脚本中,如果使用相对路径,那么该相对路径是相对于项目根目录的,也就是${project.getRootDir()}
  20. */
  21. preBuildScript = []
  22. /**
  23. * Multi-Channel
  24. */
  25. channel {
  26. /**
  27. * Multi-Channel 输出目录
  28. */
  29. outputDir = new File("${project.buildDir}/outputs/channel")
  30. /**
  31. * 执行 assembleReleaseChannel Task 输出 APK 的文件格式,可以不设置,默认为${appName}-release-${channel}
  32. */
  33. // apkFileNameFormat = '${appName}-release-${channel}-test.apk'
  34. /**
  35. * 需要写入渠道的 APK。如果配置该项,那么会有 onlyWriteChannel Task 提供使用,
  36. * 该 Task 只是将已经打好的包根据配置文件,写入渠道。
  37. */
  38. writeChannelApkFile = new File("${project.buildDir}/outputs/channel/app-release-0.apk")
  39. /**
  40. * AndroidManifest.xml 文件
  41. */
  42. manifestFile = new File("${project.getProjectDir()}/src/main/AndroidManifest.xml")
  43. /**
  44. * 依赖的变种类型,可以不设置,默认为 release
  45. */
  46. // buildType = "release"
  47. }
  48. }

然后需要创建一个渠道包的配置文件,也就是上面要用到的渠道配置文件,比如创建一个config.json:

  1. {
  2. "manifest": [
  3. {
  4. "key": "Test",
  5. "value": "V{date}"
  6. }
  7. ],
  8. "channel": {
  9. "increment": false,
  10. "incrementCount": 10,
  11. "list":[
  12. {
  13. "alias": "测试渠道",
  14. "channel": "test",
  15. "extraInfo": {}
  16. }
  17. ]
  18. }
  19. }
  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 额外的配置

如何获取渠道信息

获取渠道信息:

  1. String channel = ApkInfoReader.getChannel(getApplicationContext());

获取别名:

  1. String alias = ApkInfoReader.getAlias(getApplicationContext());

获取extraInfo中的信息:

  1. ChannelInfo info = ApkInfoReader.getChannelInfo(App.instance().getApplicationContext());
  2. String result = info.getExtraInfo().get("自定义的key");

打包

可以直接执行如下命令:

  1. # 渠道发布包
  2. gradle assembleReleaseChannel

如果不想执行命令,那么在Android Studio界面右侧,点击Gradle,然后选择你的主工程,然后找到mv2build目录,执行相应的任务就可以了。

参考致谢