如何让Android APK仅在指定手机运行,其他设备无法使用?
实现仅在指定手机运行的Android APK思路
设备唯一标识符校验
把你手机的IMEI、Android ID或者序列号这类唯一标识提前存进APP。每次启动APP时,先获取当前设备的对应标识,和预存的比对,不匹配就直接退出或者弹出“未授权”提示后关闭应用。
举个获取IMEI的代码片段(注意Android 10及以上需要申请权限,部分设备可能无法获取):TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { finish(); return; } String imei = telephonyManager.getImei(); if (!"你自己手机的IMEI".equals(imei)) { Toast.makeText(this, "设备未授权", Toast.LENGTH_SHORT).show(); finish(); }补充:Android 10+限制IMEI获取权限,换成Android ID更稳妥,代码是
Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID),但手机重置后Android ID会发生变化,这点要注意。多硬件参数组合校验
把CPU型号、屏幕分辨率、内存大小、WiFi MAC地址这类硬件参数组合成一个唯一密钥,预存在APP里。启动时收集当前设备的这些参数生成密钥,和预存的比对,不匹配就终止运行。
比如组合CPU和屏幕参数的示例:String cpuInfo = Build.HARDWARE + Build.CPU_ABI; DisplayMetrics metrics = getResources().getDisplayMetrics(); String screenInfo = metrics.widthPixels + "x" + metrics.heightPixels; String deviceKey = cpuInfo + "_" + screenInfo; if (!"你预存的设备密钥".equals(deviceKey)) { finish(); }这种方式比单一标识符更可靠,毕竟单个硬件参数变更概率低,组合起来更难被模拟。
签名绑定设备
为你的专属设备生成独有的签名文件,或者在APP里嵌入设备的特定证书信息,启动时校验签名是否匹配。这种方式安全性更高,但实现起来稍复杂,适合对防破解要求高的场景。服务器辅助验证(可选)
如果你有自己的服务器,可以在APP启动时把设备标识发送过去,由服务器判断是否为授权设备,未授权则返回指令让APP退出。这种方式能灵活修改授权设备,但需要服务器支持,且依赖网络。
内容的提问来源于stack exchange,提问作者Soheib
相关产品推荐
相关产品推荐

