public class VirtualApkCheckUtil
extends java.lang.Object
| 限定符和类型 | 方法和说明 |
|---|---|
boolean |
checkByCreateLocalServerSocket(java.lang.String uniqueMsg,
VirtualCheckCallback callback) |
boolean |
checkByHasSameUid(VirtualCheckCallback callback)
Android系统一个app一个uid
如果同一uid下有两个进程对应的包名,在"/data/data"下有两个私有目录,则该应用被多开了
|
boolean |
checkByMultiApkPackageName(VirtualCheckCallback callback)
运行被克隆的应用,该应用会加载多开应用的so库
检测已经加载的so里是否包含这些应用的包名
|
boolean |
checkByOriginApkPackageName(Context context,
VirtualCheckCallback callback)
检测原始的包名,多开应用会hook处理getPackageName方法
顺着这个思路,如果在应用列表里出现了同样的包,那么认为该应用被多开了
|
void |
checkByPortListening(java.lang.String secret,
VirtualCheckCallback callback)
已过时。
|
boolean |
checkByPrivateFilePath(Context context,
VirtualCheckCallback callback)
通过检测app私有目录,多开后的应用路径会包含多开软件的包名
|
java.lang.String |
checkByTopActivity(Context context) |
java.lang.String |
checkByTopTask(Context context)
TopActivity的检查顶层task的思路
https://github.com/109021017/android-TopActivity
TopActivity作为另一个进程(观察者的角度)
能够正确识别多开软件的正确包名,类名
这也是为什么能知道使用多开分身app多开后的应用包名是随机的。
|
static VirtualApkCheckUtil |
getSingleInstance() |
public static VirtualApkCheckUtil getSingleInstance()
public boolean checkByPrivateFilePath(Context context,
VirtualCheckCallback callback)
context - callback - public boolean checkByOriginApkPackageName(Context context,
VirtualCheckCallback callback)
context - callback - public boolean checkByMultiApkPackageName(VirtualCheckCallback callback)
callback - public boolean checkByHasSameUid(VirtualCheckCallback callback)
callback - @Deprecated
public void checkByPortListening(java.lang.String secret,
VirtualCheckCallback callback)
secret - callback - public boolean checkByCreateLocalServerSocket(java.lang.String uniqueMsg,
VirtualCheckCallback callback)
public java.lang.String checkByTopTask(Context context)
能够正确识别多开软件的正确包名,类名 这也是为什么能知道使用多开分身app多开后的应用包名是随机的。 这里我只是提供调用方法,随时可能删掉。
public java.lang.String checkByTopActivity(Context context)