原理
Android 6.0的分身应用为了能与原应用区分开来,会更改手机的UserId,默认手机的UserId为0,可以通过获取应用文件位置来判断是否开启了分身或多开。
代码
使用代码:
context.getFilesDir().getAbsolutePath();
获取到的App应用位置数据在各Android API下的取值如下:
- API 27
/data/user/0/packageName/files - API 26
/data/user/0/packageName/files - API 25
/data/user/0/packageName/files - API 24
/data/user/0/packageName/files - API 23
/data/user/0/packageName/files - API 22
/data/data/packageName/files - API 21
/data/data/packageName/files - API 19
/data/data/packageName/files - API 18
/data/data/packageName/files - API 17
/data/data/packageName/files - API 16
/data/data/packageName/files
所以使用代码:
public void isVirtualApp() {
String path = context.getFilesDir().getAbsolutePath();
if (path != null && path.length() > 0) {
if (path.startsWith("/data/user/0/") || path.startsWith("/data/data/"){
//TODO 正常应用
} else {
//TODO 分身应用
}
}
}就可以判断出是否用户开启了手机分身或App多开。
注:
- 手机分身
UserId为55 - 应用多开
UserId为999
附:
- 感谢
mawei7510文章的启发 - 感谢
求己、本人的名字不一定需要太长的体力劳动
xposed轻松越过