使用美团walle多渠道打包+友盟统计+Apk包加固

链接地址

Walle_Android Signature V2 Scheme签名下的新一代渠道包打包神器

ProtectedApkResignerForWalle_[Walle WiKi官方推荐]一步解决应用加固导致Walle渠道信息失效的自动化脚本工具,自动生成渠道包

友盟统计

Python2.7_Python环境

walle-cli使用说明

依据友盟官方文档接入友盟统计(这里只关注关于友盟渠道统计应注意的点)
Channel渠道的使用规范

每台设备仅记录首次安装激活的渠道,在其他渠道再次安装不会重复计量。 所以在测试不同的渠道的时候,请使用不同的设备来分别测试不要改变’UMENG_CHANNEL’。

Channel渠道的命名规范
  • 可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。

  • 首尾字符不可以为空格。

  • 不要使用纯数字作为渠道ID。

  • 最多256个字符。

  • “unknown” 及其各种大小写形式,作为【友盟+】保留的字段,不可以作为渠道名。

在您查看数据时,渠道会作为一个数据细分的维度。

接下来,需要友盟appkey和channel值来呼叫友盟初始化函数

初始化方法由基础组件包提供,要使用统计SDK,需要在宿主应用application.onCreate函数中调用基础组件包提供的初始化函数:

/**
* 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调
* 用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,
* UMConfigure.init调用中appkey和channel参数请置为null)。
*/
UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret);

或者

/** 
* 注意:如果您已经在AndroidManifest.xml中配置过appkey和channel值,可以调用此版本初始化函数。
*/
UMConfigure.init(Context context, int deviceType, String pushSecret);
// 这里我们需要呼叫5个参数的初始化函数,并传入友盟appkey和channel值
UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret);
channel值,是通过walle中用于读取渠道号的AAR来进行获取的(依据walle的Github的README.md文档进行配置自我项目(这里只关注关于渠道应注意的点))

配置channel信息(渠道信息)

channel文件内容

# 配置自我项目所需要的渠道信息_依照友盟Channel渠道的命名规范
# 例如下述
# Google Play
googleplay
# 美团
meituan 
// 配置完成后,呼叫WalleChannelReader的getChannel函数进行获取渠道信息
String channel = WalleChannelReader.getChannel(this.getApplicationContext());

依据walle的Github的README.md文档

生成渠道包

生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录

用法示例:

  • 生成渠道包 ./gradlew clean assembleReleaseChannels
  • 支持 productFlavors ./gradlew clean assembleMeituanReleaseChannels

Windows系统下_命令如下(删除./即可):

gradlew clean assembleReleaseChannels

最后将在指定渠道包的输出路径下找到自己所打包好的渠道包可以上传发布市场啦。

但是一般来说,我们上传市场的包是需要加固的,为什么加固哦。就和自我需要穿衣服的一样的呀。总不能裸奔吧。(啊,不会吧,您还有那种兴趣爱好哦。。。难受哦)。

Apk包加固,由于Apk包加固后,获取不到渠道信息,渠道自然而然也就统计失败啦。

啊哦,那么我们使用walle上述所进行的多渠道打包操作就做了无用功啊。

既然问题出来了,我们该如何去解决呢?

在walle的README.md文档中寻找到

Q&A

这里看到啦,专门修复类似360加固重签名和批量注入渠道,2秒搞定的ProtectedApkResignerForWalle。

去看看呢。

[Walle WiKi官方推荐]一步解决应用加固导致Walle渠道信息失效的自动化脚本工具,自动生成渠道包。

优秀,NB。快且稳定(官方推荐)。

依照ProtectedApkResignerForWalle的README.md文档描述进行使用

写在前面

最近很多朋友问我这个脚本和walle的关系,用了这个脚本还用walle吗?在这里我来解释下:

官方walle分为两部分,第一部分是打包部分,包括 plugin 部分和 build.gradlewalle{...} 脚本,另一部分是用于读取渠道号的AAR,如果你使用类似友盟等统计工具,你需要利用walle提供的aar来读取你的渠道信息,然后手动传给友盟渠道信息。在不考虑加固的情况下只需要执行类似./gradlew clean assembleReleaseChannels,AS会自动执行gradle中的脚本和插件进行多渠道打包。

ProtectedApkResignerForWalle是用于解决walle产生的加固问题,用的是walle的打包CLI,替代的是第一部分,所以你无须引用 plugin 部分和 build.gradlewalle{...} 脚本部分,第二部分还是要正常引用的。多渠道打包时,先加固,然后把未签名的apk使用此脚本进行多渠道打包即可。

按照上述描述,进行使用。

1、移除walle的打包部分,只留下用于读取渠道号的AAR部分。

2、打一个正式包出来,然后选择加固方案(我司使用的腾讯云的加固方案)


image-20201118160036234.png

3、立即去加固,加固后,下载加固后的Apk包。

4、使用ProtectedApkResignerForWalle(需要Python环境)进行打包签名多渠道包。将其项目从Github上Clone到本地。

5、ProtectedApkResignerForWalle的使用

  • 按照config.py文件中的注释改成自己项目配置
  • 将已经加固好的包【未签名的包,请不要使用加固客户端签名工具】放到脚本工具根目录下,即app-release.encrypted.apk
  • 各种渠道的定义是在channel这个文件中,请根据项目情况修改
  • 运行命令 python ApkResigner.py,即可自动生成所有渠道包。

6、将以下红框中的所需要的文件放入根目录中

  • 加固后的Apk包
  • 渠道信息文件(可以从自我项目中拿到,之前不是按照walle官方文档进行配置了自我项目嘛)
  • 签名文件(.jks)


    image-20201118160742037.png

7、修改config.py文件配置,可以使用Notepad++等任何工具打开并编辑。

8、浏览一下config.py文件。

#!/usr/bin/python  
#-*-coding:utf-8-*-

#keystore信息
#Windows 下路径分割线请注意使用\\转义
keystorePath = "..path/your.keystore"
keyAlias = "your keyAlias"
keystorePassword = "your keystorePassword"
keyPassword = "your keyPassword"

#加固后的源文件名(未重签名)
protectedSourceApkName = "your protected.apk"
#加固后的源文件所在文件夹路径(...path),注意结尾不要带分隔符,默认在此文件夹根目录
protectedSourceApkDirPath = ""
#渠道包输出路径,默认在此文件夹Channels目录下
channelsOutputFilePath = ""
#渠道名配置文件路径,默认在此文件夹根目录
channelFilePath = ""
#额外信息配置文件(绝对路径,例如/Users/mac/Desktop/walle360/config.json)
#配置信息示例参看https://github.com/Meituan-Dianping/walle/blob/master/app/config.json
extraChannelFilePath = ""
#Android SDK buidtools path , please use above 25.0+
sdkBuildToolPath = "/Users/mac/Library/Android/sdk/build-tools/26.0.2"

9、将其自我项目配置进入写入该文件中,修改后的文件如下所示。

#!/usr/bin/python  
#-*-coding:utf-8-*-

#keystore信息
#Windows 下路径分割线请注意使用\\转义
keystorePath = "yunyang.jks"
keyAlias = "yunyang"
keystorePassword = "yunyang"
keyPassword = "yunyang"

#加固后的源文件名(未重签名)
protectedSourceApkName = "app-release.encrypted.apk"
#加固后的源文件所在文件夹路径(...path),注意结尾不要带分隔符,默认在此文件夹根目录
protectedSourceApkDirPath = ""
#渠道包输出路径,默认在此文件夹Channels目录下
channelsOutputFilePath = ""
#渠道名配置文件路径,默认在此文件夹根目录
channelFilePath = ""
#额外信息配置文件(绝对路径,例如/Users/mac/Desktop/walle360/config.json)
#配置信息示例参看https://github.com/Meituan-Dianping/walle/blob/master/app/config.json
extraChannelFilePath = ""
#Android SDK buidtools path , please use above 25.0+
sdkBuildToolPath = "C:\\Users\\shenq\\AppData\\Local\\Android\\sdk\\build-tools\\25.0.1"

10、在当前目录下运行命令 python ApkResigner.py,即可自动生成所有渠道包(默认在此文件夹Channels目录下)。


image-20201118162150058.png

11、查看渠道信息是否写入Apk包中,使用walle-cli(可以在lib文件夹中找到)。


image-20201118161816671.png

12、依据walle-cli官方文档使用(在当前目录下执行命令)。

显示当前apk中的渠道和额外信息:

java -jar walle-cli-all.jar show 你的apk名.apk的路径

例如:

java -jar walle-cli-all.jar show C:\AAAAAEdit\ProtectedApkResignerForWalle-master\app-release.encrypted.apk
image-20201118162658918.png

渠道信息如上所示。

最后我们就可以拿着打包好的携带渠道信息的包开开心心的上传市场啦。

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

推荐阅读更多精彩内容