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