android渠道校验,Android渠道版本自动化校验
国内市场上有许许多多的应用市场,常见的有:百度、360、腾讯应用宝、豌豆荚等。其他手机厂家如小米、华为、魅族、三星等都有自己的应用市场,总共有上百家!
1. 问题
发版前,Android工程师打包了上百个渠道版本,如何检验渠道号与apk名称是否一致?版本、友盟、环信、极光推送、高德地图等key是否准确?
2. 怎么做
Android Apk的渠道号、key等一般存放在AndroidManifest.xml文件中。
批量反编译Android Apk
遍历反编译后的apk文件夹,从AndroidManifest.xml取出渠道号
比较渠道号与apk名称、比较各种key
将测试结果写入csv文件
3. 过程
3.1 安装环境
windows/Linux/Mac都可,你需要做的就是安装好Java,或Python。由于android为java所编写,所以需要下载apktool.jar反编译工具反编译class文件和xml文件。
3.2 反编译Android Apk
apktool.jar -f 会对apk的资源文件、源码等所有的文件进行反编译,耗时较长。
使用 -s 选项可跳过源码编译,节省时间。
java -jar apktool.jar d -f package.apk
输出结果如下:
I: Using Apktool 2.1.0 on test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\Administrator\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
打开AndroidManifest.xml文件,即可看到渠道号
3.3 获取渠道号
几十个渠道怎么办?这时就用到python了。
输入目录,遍历目录下的apk.
def decompiler(vdir):
vapk = [ cv for cv in os.listdir(vdir) if os.path.splitext(cv)[1] == '.apk' ]
print(" -> The Path has found {0} channel version,is in decomopiling,Please wait.....\n".format(len(vapk)))
for idx,apk in enumerate(vapk):
channeldir,extension = os.path.splitext(apk)
if os.path.isdir(channeldir):
pass
else:
print(" -> The \033[1;37;44m {0} \33[0m Apk is processing : {1}".format(idx,apk))
#反编译apk文件
os.popen('java -jar apktool.jar d -s {0}'.format(apk))
reverse_apk_folder = [ opf for opf in os.listdir(vdir) if os.path.isdir(opf) ]
print("-------------------------------------------------------------------")
print(" -> {0} Finish Apk decompiling.".format(now))
print(" -> Total: \033[1;32;44m {0} \33[0m Apk Floder. ".format(len(reverse_apk_folder)))
return vapk,reverse_apk_folder
或者直接输入编译后的apk文件夹,具体如下:
def get_apk_umeng_value(reverse_folder):
umeng_channel = []
for rfn in reverse_folder:
manifest = os.path.join(version_catalogue,rfn,'AndroidManifest.xml')
with open(manifest,'r+') as m:
umeng_line = [ line.strip() for line in m.readlines() if 'UMENG_CHANNEL' in line ]
for ul in umeng_line:
ucv = ul.split('=')[2]
#使用strip过滤"/>//--等特殊字符
umeng_channel.append(ucv.strip('"/>// --'))
return umeng_channel
处理AndroidManifest.xml文件
def handling(filename,text):
textual_value = ""
with open(filename,'r+') as m:
line = [ line.strip() for line in m.readlines() if text in line ]
for n in line:
value = n.split('=')[2]
#使用strip过滤"/>//--等特殊字符
textual_value = value.strip('"/>// --')
return textual_value
3.4 结果输出
使用python pandas优雅输出测试结果,并写入到csv文件。
Paste_Image.png
完整代码地址:
https://github.com/yi-heng/Android-Test/blob/master/Android_Channel_Test/channelverify.py
android渠道校验,Android渠道版本自动化校验相关推荐
- AVB校验微观版本:android avb(Android Verified Boot)验证
前辈原文:https://blog.csdn.net/weixin_43836778/article/details/90400147 其实可能有人会说,怎么整这么多重复的,其实不是的.这是为了不断地 ...
- android 渠道方案,Android多渠道打包时获取当前渠道的方法
作为Androidapp,发布多个分发平台是常规操作.然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码. 这里把简单的代码记一 ...
- android 渠道索取,Android多渠道打包时获取当前渠道的方法
作为android app,发布多个分发平台是常规操作.然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码. 这里把简单的代码记 ...
- android 8.0的imei简书,Android 8.0通知栏渠道,渠道组的适配和使用
Android 8.0通知栏渠道,渠道组的适配和使用 推广一下 博客 android 8.0开始引入了渠道组的概念,app可以对通知类型进行细分,比如划分为:广告消息,私聊消息,群聊消息等. 但其实到 ...
- android多渠道 依赖,android 不同渠道 添加不同依赖jar 使用不同代码
android由于不同的渠道用到的依赖不同,比如个推sdk分谷歌市场版和国内版,要在同一个项目中根据渠道来分别加载两个sdk. 1.将两个jar包凡在src目录下的lib文件夹中,并且在gradle文 ...
- 踩雷1:Android Studio:3dmap 隐私合规校验失败: errorcode 555570 确保调用SDK任何接口前先调用更新隐私合规updatePrivacyShow、updateP
Android Studio:3dmap 隐私合规校验失败: errorcode 555570 确保调用SDK任何接口前先调用更新隐私合规 出现隐私合规校验失败这样的情况下,查找高德地图开发者平台开发 ...
- android 渠道方案,Android 不同渠道差异代码
前言 在开发过程中,会遇到这种业务. 在某一个渠道,需要引入一些三方sdk,需要写一些差异性代码,跟原来的业务有重叠.如果所有的判断逻辑都写在一起,会出现很多if(flavor==xxx),并且三方s ...
- Android Studio Gradle实践之多渠道自动化打包+版本号管理
转: Android Studio Gradle实践之多渠道自动化打包+版本号管理 上次介绍了Android Studio的安装.配置和基本使用.这次讲一下Android Studio用到的打包工具G ...
- Android Studio TV开发教程(十五) Android N及更早版本中的建议
Android Studio TV开发教程 (转自Android官网https://developer.android.com/training/tv/start) 文章源自:光谷佳武 https:/ ...
最新文章
- It--网络生涯去向何方?
- 机器学习笔记:线性判别分析(Fisher)
- 就业局培训计算机心得,人社局计算机培训心得体会.doc
- Centos7 +Django的安装
- 利用定时器中断方式控制led灯的闪烁速度_实验四 LED点阵
- 智能用电计量管理系统 远程预付费管理系统的设计与应用
- 惠普HP ENVY 5055 打印机驱动
- smart原则_设立目标的smart原则
- 16.子查询之exists型子查询
- 程序员的进化,Python程序员是最大的亮点
- 修改rpg maker mv的几种上限2020-05-25
- 转载:stm32的引脚有两种用途
- libxml2下载,下载地址大全
- 2021届工科生求职日记1——Abing
- lms算法的verilog实现_最小均方算法(LMS Algorithm)理论及DSP实现
- java key类型_Java 基础类型
- 运维工程师必备技能之操作系统运维(一)
- 我的毕业实习一年总结
- 车载安全计算机是列控车载,CTCS-2级列控系统车载安全计算机主要功能的研究和仿真.pdf...
- GhostScript命令参数详解(转)