apk被play protect blocked的解决方案(ADB+Appium+webdriverio)

起因:公司有海外项目,需要推广apk ,数量多,但是由于被play protect阻止安装,初版解决方案 apk加固、换签名、垃圾代码、修改资源文件的MD5,但是由于原生代码标记过于严重,推广成本高,又换了一种方案,有所缓解,原先每天固定时间查看是否被block,效果不是很好,需要写一些脚本程序自动检测,

前期准备
国际版手机,代理,play保护机制保持最新(某些带谷歌服务的模拟器也行,但是效果有时候会差),USB调试打开-通过USB验证应用
第一版方案

通过ADB命令安装app,查看是否有弹窗,而弹窗是play应用的弹窗,adb解决不了,需要人工点击弹窗确认,有一定成本,

复制代码
//安装前先检测是否已安装,卸载已安装应用
adb uninstall com.xx.xx
//安装应用
adb install com.xx.xx
第二版

在上面的基础上使用Appium+webdriverio来实现自动检测、点击弹窗(其实也可以安装apk,但是第一版已经实现了就没再用),加固-签名-上传-清缓存

官网

Welcome - Appium Documentation

官网讲解很详细,配置好环境,使用Appium Inspector来查看页面元素,第一次使用还遇到版本有bug,通过回退才能用(Error: Cannot start Appium session on real android device with Mac M1 - Device UDID is being dropped by Appium · Issue #19713 · appium/appium (github.com)),当然最新版本已经修复

主要代码如下,逻辑上可以循环检测,也可以监听,根据业务实现就好

复制代码
const { remote } = require('webdriverio');

const capabilities = {
  "platformName": "Android", 
  "appium:udid": "xxxxxx",
  "appium:platformVersion": "9",
  "appium:automationName": "UiAutomator2"
};

const wdOpts = {
  hostname: process.env.APPIUM_HOST || 'localhost',
  port: parseInt(process.env.APPIUM_PORT, 10) || 4723,
  logLevel: 'info',
  capabilities,
};
const driver = await remote(wdOpts);
const  btn= await driver.$('//*[@text="知道了"]');
await btn.click();

检测完,把有问题的apk,加固好换签名(可api实现,可人工),上传,刷新缓存

签名

复制代码
const { execSync } = require('child_process');

execSync(` java -jar apksigner.jar sign --ks ./bazel_debug.keystore -ks-key-alias xxx  -ks-pass pass:xxx -key-pass pass:xxx --out ./signed/xxx.apk ./unsigned/xxx.apk `);

上传 、清缓存

公司使用的oss、aws,需要接对应的SDK上传、刷新DNS或者失效。

相关推荐
阿祖_in_coding2 天前
混合App(Hybrid App)自动化测试理解
appium
returnthem9 天前
安装Appium
appium
seabirdssss14 天前
Appium 在小米平板上的安装受限与闪退排查
android·appium·电脑
小陈的进阶之路18 天前
Selenium 滑动 vs Appium 滑动
python·selenium·测试工具·appium
小陈的进阶之路18 天前
Appium 自动化测试笔记
笔记·appium
linglan42820 天前
APPium环境配置
appium·自动化
lifewange1 个月前
Appium是什么
appium·压力测试
柚子+1 个月前
Appium+python+雷电模拟器自动化测试入门
数据库·python·appium
@Aurora.1 个月前
【GUI自动化测试】--基于QQ音乐项目的GUI自动化测试
appium