文案素材网站,客户管理系统推荐,国际新闻今天,织梦做中英文网站步骤起因:公司有海外项目#xff0c;需要推广apk #xff0c;数量多#xff0c;但是由于被play protect阻止安装#xff0c;初版解决方案 apk加固、换签名、垃圾代码、修改资源文件的MD5#xff0c;但是由于原生代码标记过于严重#xff0c;推广成本高#xff0c;又换了一种…起因:公司有海外项目需要推广apk 数量多但是由于被play protect阻止安装初版解决方案 apk加固、换签名、垃圾代码、修改资源文件的MD5但是由于原生代码标记过于严重推广成本高又换了一种方案有所缓解原先每天固定时间查看是否被block效果不是很好需要写一些脚本程序自动检测
前期准备
国际版手机代理play保护机制保持最新某些带谷歌服务的模拟器也行但是效果有时候会差USB调试打开-通过USB验证应用
第一版方案
通过ADB命令安装app查看是否有弹窗而弹窗是play应用的弹窗adb解决不了需要人工点击弹窗确认有一定成本
//安装前先检测是否已安装卸载已安装应用
adb uninstall com.xx.xx
//安装应用
adb install com.xx.xx
第二版
在上面的基础上使用Appiumwebdriverio来实现自动检测、点击弹窗其实也可以安装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或者失效。