Android 多渠道打包梳理


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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容