Android光速打包

快速打包插件 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.7packer-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

注意事项中给我们说明了两件事情:

  1. 不支持productFlavors中定义的条件编译
  2. 不支持修改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.xmlapplication结点中加上android:name=".Application.ApplicationMain"

进行了以上的所有设置之后,我们就可以享受光速打包了,根据我亲测,打50个包的速度是1分钟左右,这一分钟包括检查插件和编译信息等等.其实开始打第0个包到第49个包大概是10多秒钟吧。

    原文作者:猴子下山写代码
    原文地址: https://www.jianshu.com/p/f30ac07536c8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞