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 文件的情况:

  1. 从 Android 源码中拷贝以下三个文件:

    • build/target/product/security/platform.pk8
    • build/target/product/security/platform.x509.pem
    • out/host/linux-x86/framework/signapk.jar
  2. 将编译好的 APK 与上述文件放在同一目录

  3. 执行签名命令:

java -jar signapk.jar platform.x509.pem platform.pk8 ForlinxActivity.apk new.apk

生成的 new.apk 即可安装到开发板。

注意事项

  • 方法一适用于有源码的项目
  • 方法二适用于已有编译好的 APK 需要重新签名的情况
  • system 权限的 APK 只能在出厂镜像中使用,第三方应用不建议使用

参考