You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:25:20