我创建了一个应用。我只想通过手机购买一个应用程序,但我可以使用并行空间 - 多帐户创建我的应用程序的克隆。所以我的问题是如何停止克隆我的应用程序。 Android有任何唯一标识符,即使用户重置手机也无法改变吗?
答案 0 :(得分:1)
我认为没有办法阻止"平行空间"克隆你的应用程序,这是与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。这是我讨厌android的东西。我检查不同的标识符,如deviceid,imei,mac address等。但并行空间为所有标识符创建新值。
答案 1 :(得分:0)
在我搜索了很多停止应用克隆的解决方案后,我想到了这个想法,那就是检查应用数据在手机上的安装路径。
下面的代码进一步解释了这个想法:
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;
}