Android 多渠道打包梳理

作者: Passon_Fang | 来源:发表于2017-02-07 14:23 被阅读274次

title: Android 软件打包
date: 2016-04-09 12:18:12
tags: 软件打包
category: Android


0 软件包的数字签名

  1. 公钥、私钥
  2. 使用私钥对软件包进行签名,并且在软件包中包含公钥,Android手机就能够在安装软件的时候,进行软件有效性的检查,检查软件是否被非法篡改。

keystore 生成

1

2

3

4

5

将 keystore加入到软件中

6

7

之后debug模式和release模式都是用这个keystore,或者两个申请不同的接口

1 Gradle UMeng 多渠道打包

修改 AndroidManifest.xml 里配置 (PlaceHolder)

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />

在 build.gradle 设置 productFlavors

android {  
    ...
    productFlavors {
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        _360 {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
        }
        baidu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        ...
    }  
    ...
}

或者批量修改:

android {  
    productFlavors {
        xiaomi {}
        _360 {}
        baidu {}
        wandoujia {}
    }  

    productFlavors.all { 
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] 
    }
}

解释:productFlavors 类似于一个产品的不同特性的配置[2]. productFlavors.all 是一个遍历,每一个 productFlavors 中的值,其中productFlavors 的每一个值都有一个 name ,就是类似 wandoujia 这样的字符,每次循环的时候会替换掉 AndroidManifext.xml 中的${ONEAPMTESTCHANNEL}。

打包 执行 ./gradlew assembleRelease

打开命令行定位到 project 目录,执行:

./gradlew assembleRelease

注意事项:

  1. productFlavors 定义的时候里面的类似 wandoujia,不能是数字开头,不能是关键字 test 等,因为你要意识到你在写 gradle 脚本,要符合 groovy 语法。如下面的就不合法
  2. flavor.manifestPlaceholders = [ONEAPMTESTCHANNEL: name]中的ONEAPMTESTCHANNEL 一定要和 AndroidManifext.xml 定义的一致。

assemble 命令

assemble 这个命令,会结合 Build Type 创建自己的task,如:

./gradlew assembleDebug # 会打包 Debug apk
./gradlew assembleRelease # 打包 Release apk

除此之外 assemble 还能和 Product Flavor 结合创建新的任务(assemble + Build Variants),Build Variants = Build Type + Product Flavor

比如:打包wandoujia渠道的release版本

./gradlew assembleWandoujiaRelease # 打包 wandoujia Release 版本,大小写不敏感

./gradlew assembleWandoujia  # 此命令会生成wandoujia渠道的Release和Debug版本

packer-ng-plugin 打包工具

项目地址:https://github.com/mcxiaoke/packer-ng-plugin

walle 打包工具使用 (推荐使用)

项目地址:https://github.com/Meituan-Dianping/walle

集成方法

project 的 build.gradle 添加:

dependencies {
    classpath 'com.meituan.android.walle:plugin:1.0.3'
}

app/build.gradle 添加:

apply plugin: 'walle'

dependencies {
    ...
    compile 'com.meituan.android.walle:library:1.0.3'
}

在工程目录下创建 channel 文件:

meituan # 美团
samsungapps #三星
hiapk
anzhi
xiaomi # 小米
91com
gfan
appchina
nduoa
3gcn
mumayi
10086com
wostore
189store
lenovomm
hicloud
meizu
wandou
# Google Play
# googleplay
# 百度
baidu
#
# 360
360cn
#
# 应用宝
myapp

动态设置 UMeng 渠道(见下文 umeng 渠道动态设置

打包:在工程根目录下执行(或者使用 Android Studio 的 Terminal,其默认路径就是工程根目录)

./gradlew clean assembleRelease -PchannelFile=channel

// windows 下
gradlew.bat clean assembleRelease -PchannelFile=channel

umeng 渠道动态设置

在 Application 中添加下面的代码动态设置渠道

        String channel = WalleChannelReader.getChannel(this.getApplicationContext());
        String umengAppkey = "58996177cae7e76cc3001737";
        MobclickAgent.UMAnalyticsConfig umAnalyticsConfig = new MobclickAgent.UMAnalyticsConfig(this,
                umengAppkey,
                channel,
                MobclickAgent.EScenarioType.E_UM_NORMAL,
                true);

         MobclickAgent.startWithConfigure(umAnalyticsConfig);

注意:

  • 友盟渠道:每个设备只记录初始的安装渠道,新的渠道请用之前没有安装过别的渠道包的设备进行测试。
  • 如果使用代码的形式设置 Appkey 和 channel ,需要删除 AndroidManifest.xml 中的 Appkey,channel

相关文章

网友评论

    本文标题:Android 多渠道打包梳理

    本文链接:https://www.haomeiwen.com/subject/ylzpittx.html