本文需要一定的AOSP源码编译基础。
1、准备系统签名文件
系统签名文件位于Android源码目录build/target/product/security
下:
platform.pk8
platform.x509.pem
2、生成signapk.jar
SignApk.jar是安卓源码包中的一个签名工具,代码位于Android源码目录下的/build/tools/signapk/SignApk.java文件中。可以编译生成SignApk.jar。
编译生成SignApk.jar步骤:
①进入/build/tools/signapk/文件夹(mm不能执行的话,可以先到根目录source build/envsetup.sh)
②执行命令: mm
③在out/host/linux-x86/framework/目录找到signapk.jar。
3、签名APK
把需要签名的apk以及上面两步的文件放到同一个文件夹,如下所示:
abao@abao-Lenovo:~/Desktop/siginAPK$ tree
.
├── platform.pk8
├── platform.x509.pem
├── signapk.jar
└── target-debug.apk
0 directories, 4 files
在该目录执行命令:java -jar signapk.jar platform.x509.pem platform.pk8 target-debug.apk new.apk
可能会出现错误如下,再执行第4步
Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni-linux-x86_64 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:843)
at java.lang.System.loadLibrary(System.java:1136)
at org.conscrypt.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:297)
at org.conscrypt.NativeLibraryLoader$1.run(NativeLibraryLoader.java:289)
at java.security.AccessController.doPrivileged(Native Method)
at org.conscrypt.NativeLibraryLoader.loadLibraryFromHelperClassloader(NativeLibraryLoader.java:289)
at org.conscrypt.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:262)
at org.conscrypt.NativeLibraryLoader.load(NativeLibraryLoader.java:162)
at org.conscrypt.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:106)
at org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:50)
at org.conscrypt.NativeCrypto.<clinit>(NativeCrypto.java:63)
at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:58)
at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:51)
at org.conscrypt.OpenSSLProvider.<init>(OpenSSLProvider.java:47)
at com.android.signapk.SignApk.main(SignApk.java:1008)
4、找到 libconscrypt_openjdk_jni库
若是Linux系统
拷贝Android源码目录out/host/linux-x86/lib64/libconscrypt_openjdk_jni.so,最终目录结构如下:
abao@abao-Lenovo:~/Desktop/siginAPK$ tree
.
├── libconscrypt_openjdk_jni.so
├── platform.pk8
├── platform.x509.pem
├── signapk.jar
└── target-debug.apk
0 directories, 5 files
最后在该目录下执行命令:java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 target-debug.apk app_sign.apk