Android APP 获得签名
背景
当开发者的 Android APP 在 AndroidManifest.xml 中设置了 system 权限后,普通编译的 APK 无法直接安装到开发板,会报:
Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
原因是设置了 system 权限的 APP 需要使用系统签名才能正常安装运行。
manifest 配置示例
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="forlinx.example.app">
<application ...>
...
</application>
<!-- 设置 system 权限 -->
android:sharedUserId="android.uid.system"
</manifest>方法一:源码编译时指定证书
在 Android.mk 中添加:
LOCAL_CERTIFICATE := platform然后使用 make 编译,生成的 APK 可直接在开发板运行。这是源码中 APP 采用的方法。
方法二:使用 SignApk.jar 签名
适用于已有 APK 文件的情况:
-
从 Android 源码中拷贝以下三个文件:
build/target/product/security/platform.pk8build/target/product/security/platform.x509.pemout/host/linux-x86/framework/signapk.jar
-
将编译好的 APK 与上述文件放在同一目录
-
执行签名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 ForlinxActivity.apk new.apk生成的 new.apk 即可安装到开发板。
注意事项
- 方法一适用于有源码的项目
- 方法二适用于已有编译好的 APK 需要重新签名的情况
- system 权限的 APK 只能在出厂镜像中使用,第三方应用不建议使用