我创建了一个应用程序。我希望每个手机只有一个应用程序,但我可以使用 Parallel Space-Multi Accounts 创建我的应用程序的克隆。所以我的问题是如何停止克隆我的应用程序。 android是否有任何唯一标识符,即使用户重置手机也不会改变?
我找了很多解决方法来阻止应用程序克隆,我想到了这个想法,即检查应用程序数据在手机上的安装路径。
下面的代码进一步解释了这个想法:
int APP_PACKAGE_COUNT = 2; //----> my app package name is com.test.app the number is count of dots in package name
private void checkClonner() {
String path = this.getFilesDir().getAbsolutePath();
int count = getDotCount(path);
if (count > APP_PACKAGE_COUNT) {
throw new RuntimeException("This app does not work in a cloning environment");
}
}
private int getDotCount(String path) {
int count = 0;
for (int i = 0; i < path.length(); i++) {
if (count > APP_PACKAGE_COUNT) {
break;
}
if (path.charAt(i) == '.') {
count++;
}
}
return count;
}
我认为没有办法阻止“平行空间”克隆您的应用程序,这是Android系统的问题。
我使用的一个简单解决方法是检查是否安装了 Parallel Space 应用程序(ps 包名称:com.lbe.parallel.intl)。
public boolean isAppInstalled(String packageName) {
try {
getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
正如您所猜测的那样,它是不可靠的,因为许多不同的应用程序都可以用于此目的。我没有进一步处理我的案子,但我想到了一件事;如果你有文件写入权限,你可以创建一个全局文件并在打开你的应用程序时放一些东西来检查。
了解此类应用程序如何工作的人可以提供更好的答案。如果他们在复制时更改了您的 apk 中的某些内容,那么您可以检查这些更改或 apk 的哈希码,但似乎他们在虚拟操作系统中运行您的应用程序,因此这可能无法找到解决方案。
不幸的是,Android 上没有成功的唯一 ID。这是我讨厌安卓的地方。我检查了不同的标识符,如 deviceid、imei、mac 地址等。但并行空间为所有这些创建了新值。