文章目录
给APK生成系统签名(signapk.jar)
环境准备
编译过AOSP源码,并且执行过source build/envsetup.sh命令
拷贝库文件libconscrypt_openjdk_jni.so到aosp根目录下
machine:~/aosp$ cp prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so .
在aosp根目录下,通过系统签名文件给apk进行系统签名
**将需要签名的apk放在aosp根目录下,在aosp根目录下执行以下命令:
machine:~/aosp$
java -Xmx2048m -Djava.library.path="out/host/linux-x86/lib64" \
-jar out/host/linux-x86/framework/signapk.jar \
build/target/product/security/platform.x509.pem \
build/target/product/security/platform.pk8 \
app-debug.apk app-debug-signed.apk
-Djava.library.path 用于指定本地库的路径, 本地库通常是使用Java Native Interface (JNI) 来调用本地代码的库文件。
这里主要是用到libconscrypt_openjdk_jni.so这个库。
命令执行成功后,会在aosp根目录下生成app-debug-signed.apk
就是签名后的apk。
查看APK的签名信息
machine:~/aosp$
keytool -printcert -jarfile app-debug-signed.apk
四种key介绍
可以看到在Android系统中,有四种常见的签名密钥,分别是testkey、platform、shared和media。每个密钥用于签署不同类型的应用或组件,具有不同的权限和用途。
- testkey:
类型: 开发和测试使用。
特点: 通常用于开发和测试阶段,不是用于生产环境。应用使用 testkey 签名时,系统会将其标记为测试版本,通常会有一些限制,例如无法安装在未解锁的设备上。 - platform:
类型: Android平台的系统应用。
特点: 用于签署Android平台的系统应用,这些应用是由设备制造商提供的预装应用。这种签名允许应用访问系统的一些敏感权限和功能,而这些权限通常不允许其他应用获得。 - shared:
类型: 平台的共享系统库。
特点: 主要用于签署Android平台上的共享系统库,这些库可以由多个应用共享。共享库可以提供一组通用的功能,供系统上的多个应用使用。这使得库可以更好地重用,减少重复的代码。 - media:
类型: 用于签署媒体库。
特点: 主要用于签署Android平台上的媒体库,这些库提供音频和视频处理功能。这样的签名允许库访问系统上的音频和视频资源,这对于多媒体应用和功能非常重要。
应用程序的Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定哪个key签名,未指定的默认用testkey。Android.bp中为:certificate: “platform”。
在aosp build/target/product/security目录下查看key:
.pk8代表私钥,.x509.pem公钥,它们都是成对出现。
使用脚本工具给APK生成系统签名(signapk.jar)
将签名资源放在同一个文件夹下
新建systemsign文件夹,放入以下资源:
需要进行签名的APK:Fragment.apk
签名密钥:platform.pk8和platform.x509.pem
脚本文件:sign.bat
签名工具:signapk.jar
编写脚本文件:sign.bat
批处理使用::注释
pause
::给APK生成系统签名
java -jar signapk.jar *.x509.pem *.pk8 *.apk signed.apk
pause
::查看APK的签名信息
keytool -printcert -jarfile signed.apk
pause
双击执行脚本文件,生成signed.apk即签名APK
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
给APK生成系统签名(apksigner.jar)
在aosp根目录下,通过系统签名文件给apk进行系统签名
将需要签名的apk放在aosp根目录下,在在aosp根目录下执行以下命令:
apksigner sign --key build/target/product/security/platform.pk8 --cert build/target/product/security/platform.x509.pem app-debug.apk
命令执行成功后,会在aosp根目录下重新生成app-debug.apk 就是签名后的apk。
查看APK的签名信息
在aosp根目录下执行以下命令:
apksigner verify -print-certs app-debug.apk
使用signapk.jar签名和apksigner.jar签名的区别
signapk.jar 是早期的 Android 签名工具,而 apksigner.jar 是更新的版本,它们都用于给 Android 应用程序(APK)文件签名。
主要区别如下:
-
signapk.jar 是基于 JAR 文件的签名,而 apksigner.jar 是基于 APK 文件的签名。
-
apksigner.jar 支持对 APK 文件进行验证签名操作,而 signapk.jar 不支持。
-
apksigner.jar 是 Android SDK Build-Tools 的一部分,而 signapk.jar 随 SDK 一起提供。
-
apksigner.jar 支持 V2 和 V3 签名方案,而 signapk.jar 仅支持 V1 签名方案。
-
apksigner.jar 是用 Java 编写的,而 signapk.jar 是用 Python 编写的。
推荐使用 apksigner.jar 进行 APK 签名,因为它是更现代、更强大的工具,并且是 Android SDK Build-Tools 的一部分,方便管理和更新。