当前位置: 首页 > news >正文

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或者失效。

http://www.lryc.cn/news/328644.html

相关文章:

  • 【BlossomRPC】手把手教你写一个RPC协议
  • 算法之美:堆排序原理剖析及应用案例分解实现
  • Net8 ABP VNext完美集成FreeSql、SqlSugar,实现聚合根增删改查,完全去掉EFCore
  • yolov8直接调用zed相机实现三维测距(python)
  • element跑马灯/轮播图,第一页隐藏左边按钮,最后一页隐藏右边按钮(vue 开箱即用)
  • 下载及安装PHP,composer,phpstudy,thinkPHP6.0框架
  • volatile使用场景总结
  • AcWing 1413. 矩形牛棚(每日一题)
  • macOS Sonoma 14.4.1 (23E224) 正式版发布,ISO、IPSW、PKG 下载
  • WPF使用外部字体,思源黑体,为例子
  • 9、jenkins微服务持续集成(一)
  • VOC(客户之声)赋能智能家居:打造个性化、交互式的未来生活体验
  • 时序预测 | Matlab实现GWO-BP灰狼算法优化BP神经网络时间序列预测
  • node.js学习(2)
  • 【pytest】测试数据存储在 Excel 或 TXT 文件中,如何参数化
  • ubuntu22.04@Jetson Orin Nano安装配置VNC服务端
  • 面向对象特征二:继承
  • 宝塔面板CentOS Stream 8 x86 下如何安装openlitespeed
  • LeetCode 2952.需要添加的硬币的最小数量:贪心(排序)
  • 基于SpringBoot + Vue实现的在线装修管理系统设计与实现+毕业论文
  • 阿里云安全产品简介,Web应用防火墙与云防火墙产品各自作用介绍
  • 作业 二维数组-定位问题
  • 通过Jmeter准备压测数据-mysql示例
  • 如何系统的自学python?
  • 记录一个写自定义Flume拦截器遇到的错误
  • Codeforces Round 934 (Div. 2) D. Non-Palindromic Substring
  • 如何避免公网IP安全风险
  • 探究 HTTPS 的工作过程
  • 算法学习——LeetCode力扣图论篇1
  • Stable Diffusion 模型下载:epiCPhotoGasm(真实、照片)