极速打包流程

"你好,未来"

Posted by one_cup on 2016-12-28

之前使用的是Gradle中定义productFlavors进行多渠道打包,其实在最开始接触的时候就知道有极速打包这个方案,只不过当时项目中有Tinker,抓紧上线就没使用,趁工作间隙研究研究发现,这根本就是两种方案,而且真的是很快,并且Tinker也不用那么麻烦。

packer-ng-plugin

目前所了解的最快的打包方案,并且Tinker也鼓励使用这种方式,github主页上介绍100个渠道包只用10秒,github地址在这里,官方的接入说明已经很详细了,这里就不过多说一些都知道的东西,说一些我在接入过程中遇到的小问题。

  1. markets.txt的位置:如果是放在Project根目录下,就是和setting.gradle平级的话,那么对应的就是java -Pmarket=markets.txt ,如果是在Module的目录下,就是和Module的build.gradle平级的话,那么对应的就是java -Pmarket={module名}/markets.txt
  2. 打包的Gradle命令:官方介绍的是:
    java ./gradlew -Pmarket=markets.txt clean apkRelease
    但是我在使用的时候发现,根本不好使,我是直接使用的Studio中的Terminal,并且也是在Project目录下,之后自己尝试后发现,可以将java ./gradlew 改为java gradle,之后再次尝试编译,发现报错,说build中的AndroidManifest.xml文件不能删除,之后将clean去掉之后再运行,成功在Project的build中找到对应的渠道包。如果要更改渠道包生成的名,可以看官方说明。
  3. Tinker:在Tinker的多渠道打包中指明了,可以使用这种方式,并且这种方式比productFlavors更加适合tinker,因为并没有改变代码文件。所以不用根据每一个渠道包去生成对应的补丁包,其实每一个渠道包的代码是一样的。
  4. 不要忘记在signingConfigrelease中配置v2SigningEnabled false,至于怎么判断是否需要写这句,百度。

    结论

  5. 亲测,Tinker加packer-ng-plugin是可以的,并且没有改变渠道信息。
  6. 亲测,速度确实快好多。
  7. 为什么,比如同样有100个渠道,之前的那种方式,会重复打100个包,编译期改变Manifest中的渠道信息,之后重新打包。现在的方式是将markets.txt中的文件写到zip文件中,相当于打一个包,复制一下,改其中一个文件,重复一百次,本质上是打一个包,而之前的是打100个包,这就是问什么会快的原因。