作为系统特权应用获取IMEI触发Security Exception崩溃求助
问题排查与解决方案
几个核心排查方向和解决办法
1. 权限配置没做全
别以为把应用放到priv-app就万事大吉,系统特权应用获取IMEI需要双重授权:
- 先在
AndroidManifest.xml里正确声明权限并指定保护级别:<uses-permission android:name="android.permission.READ_PHONE_STATE" android:protectionLevel="signature|privileged" /> - 然后在设备的
/system/etc/permissions/privapp-permissions-[你的包名].xml文件中添加权限授权:
注意:该文件需和应用一同部署到系统分区,权限设置为<permissions> <privapp-permissions package="你的应用包名"> <permission name="android.permission.READ_PHONE_STATE" /> </privapp-permissions> </permissions>rw-r--r--,归属root:root。
2. 签名有效性存疑
你用platform证书转keystore的步骤可能有误,得确认应用确实用AOSP的platform密钥完成了签名:
- 重新生成keystore的正确命令(针对p8证书):
# 导入证书到keystore keytool -importcert -alias platform -file platform.x509.pem -keystore platform.keystore -storepass android # 将p8格式转成pem格式 openssl pkcs8 -inform DER -nocrypt -in platform.p8 -out platform.pem # 生成PKCS12格式文件并导入到keystore openssl pkcs12 -export -in platform.pem -inkey platform.pem -out platform.p12 -name platform -password pass:android keytool -importkeystore -deststorepass android -destkeypass android -destkeystore platform.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android - 验证签名:安装应用后执行以下命令,检查输出的证书SHA-256是否与
platform.x509.pem一致:apksigner verify --print-certs app.apk
3. 系统分区文件权限错误
部署到/system/priv-app的应用目录和APK文件权限必须配置正确,否则系统不会识别为特权应用:
- 设置目录权限:
chmod 755 /system/priv-app/你的应用目录 - 设置APK文件权限:
chmod 644 /system/priv-app/你的应用目录/你的应用.apk - 重启设备,让系统重新加载特权应用配置。
4. Android版本适配问题
如果是Android 10及以上版本,需使用特权级别的电话权限:
- 将Manifest和
privapp-permissions.xml中的权限替换为android.permission.READ_PRIVILEGED_PHONE_STATE,这才是系统特权应用获取IMEI应使用的权限。 - 避免在后台线程或非Activity组件中直接调用获取IMEI的接口,尽量在前台场景下执行调用。
额外排查技巧
- 导出完整崩溃日志,明确SecurityException的具体触发原因(比如权限未授予、签名不匹配等):
根据日志提示针对性解决问题。adb logcat | grep -i securityexception
内容的提问来源于stack exchange,提问作者ARCHER
相关产品推荐
相关产品推荐

