更新记录
1.0.1(2020-07-20) 下载此版本
update license.md
1.0(2020-07-17) 下载此版本
首次发布
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
本插件基于知名开源Android检测刷子党库EasyProtector封装
EasyProtector Github地址:https://github.com/lamster2018/EasyProtector
体验检测能力
安装Demo的Apk,快速体验检测能力
链接下载:点我下载安装Demo Apk
扫码下载
拥有羊毛党、模拟器、是否root、Xposed、多开环境等等十多项检测能力💨🚀
方法快速一览
- checkByPrivateFilePath
- checkByOriginApkPackageName
- checkByMultiApkPackageName
- checkByHasSameUid
- checkByPortListening
- checkIsRunningInVirtualApk
- checkIsRoot
- checkIsDebug
- checkIsUsbCharging
- checkIsDebuggerConnected
- checkIsBeingTracedByC
- checkIsXposedExist
- checkIsRunningInEmulator
快速上手
安装原生插件
打开插件详情页,点击云打包按钮,然后导入到自己想要使用的项目
manifest.json -> App原生插件配置 ->云端插件 选择EasyProtector
导入EasyProtector插件
const easyProtector = uni.requireNativePlugin('easy-protector');
使用EasyProtector插件
const easyProtector = uni.requireNativePlugin('easy-protector');
export default {
data() {
return {
title: 'Hello',
out: "",
}
},
onLoad() {
this.log("easyProtector exist" + JSON.stringify(easyProtector))
},
methods: {
checkByPrivateFilePath(){
let ret = easyProtector.checkByPrivateFilePath();
this.log("checkByPrivateFilePath:" + ret);
},
checkByOriginApkPackageName(){
let ret = easyProtector.checkByOriginApkPackageName();
this.log("checkByOriginApkPackageName:" + ret);
},
/**
* 运行被克隆的应用,该应用会加载多开应用的so库
* 检测已经加载的so里是否包含这些应用的包名
*/
checkByMultiApkPackageName(){
let ret = easyProtector.checkByMultiApkPackageName();
this.log("checkByMultiApkPackageName:" + ret);
},
/**
* Android系统一个app一个uid
* 如果同一uid下有两个进程对应的包名,在"/data/data"下有两个私有目录,则该应用被多开了
*/
checkByHasSameUid(){
let ret = easyProtector.checkByHasSameUid();
this.log("checkByHasSameUid:" + ret);
},
/**
* 端口监听,先扫一遍已开启的端口并连接,
* 如果发现能通信且通信信息一致,
* 则认为之前有一个相同的自己打开了(也就是被多开了)
* 如果没有,则开启监听
* 这个方法没有 checkByCreateLocalServerSocket 方法简单,不推荐使用
*/
checkByPortListening(){
easyProtector.checkByPortListening();
this.log("checkByPortListening:call");
},
checkIsRunningInVirtualApk(){
let ret = easyProtector.checkIsRunningInVirtualApk();
this.log("checkIsRunningInVirtualApk:" + ret);
},
checkIsRoot(){
let ret = easyProtector.checkIsRoot();
this.log("checkIsRoot:" + ret);
},
checkIsDebug(){
let ret = easyProtector.checkIsDebug();
this.log("checkIsDebug:" + ret);
},
checkIsUsbCharging(){
let ret = easyProtector.checkIsUsbCharging();
this.log("checkIsUsbCharging:" + ret);
},
checkIsDebuggerConnected(){
let ret = easyProtector.checkIsDebuggerConnected();
this.log("checkIsDebuggerConnected:" + ret);
},
checkIsBeingTracedByC(){
easyProtector.checkIsBeingTracedByC();
this.log("checkIsBeingTracedByC:call");
},
/**
* 检测Xposed是否存在
*/
checkIsXposedExist(){
let ret = easyProtector.checkIsXposedExist();
this.log("checkIsXposedExist:" + ret);
},
/**
* 检测模拟器环境
*
* suspectCount 为嫌疑值,值越大模拟器的嫌疑越高
*/
checkIsRunningInEmulator(){
easyProtector.checkIsRunningInEmulator((ret)=>{
this.log("checkIsRunningInEmulator:" + ret);
});
},
log(text){
let now = new Date();
let time = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
this.out = (time+": "+text) +"\n\n"+ this.out;
},
}
}
完整Demo下载
Github地址:https://github.com/fengerwoo/EasyProtectorDemo
加入交流群
扫码加我微信加入微信交流群(请备注:羊毛党检测Uni插件)