在Android N中簽名使用下面的命令就可以了
java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk signed.apk
該命令在Android O中會報(bào)錯(cuò)。具體錯(cuò)誤如下。
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.conscrypt.OpenSSLBIOInputStream.<init>(OpenSSLBIOInputStream.java:34)
at org.conscrypt.OpenSSLX509Certificate.fromX509PemInputStream(OpenSSLX509Certificate.java:129)
at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:226)
at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:222)
at org.conscrypt.OpenSSLX509CertificateFactory$Parser.generateItem(OpenSSLX509CertificateFactory.java:100)
at org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:278)
at java.base/java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:355)
at com.android.signapk.SignApk.readPublicKey(SignApk.java:184)
at com.android.signapk.SignApk.main(SignApk.java:1007)
Caused by: java.lang.IllegalArgumentException: Failed to load any of the given libraries: [conscrypt_openjdk_jni-windows-x86_64, conscrypt_openjdk_jni]
at org.conscrypt.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:176)
at org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:49)
at org.conscrypt.NativeCrypto.<clinit>(NativeCrypto.java:53)
... 9 more
錯(cuò)誤原因是conscrypt_openjdk_jni-windows-x86_64, conscrypt_openjdk_jni。,也就是conscrypt_openjdk_jni。
這里需要libconscrypt_openjdk_jni.so。
libconscrypt_openjdk_jni.so 在源碼中存在于2個(gè)地方:
1.out/host/linux-x86/lib64
2.prebuilts/sdk/tools/linux/lib64
我這里用的是out/host/linux-x86/lib64下的libconscrypt_openjdk_jni.so 文件,如果1路徑下的報(bào)錯(cuò)就用2路徑下的,大家用的都不一樣。
把需要簽名的app-debug.apk,signapk.jar, platform.x509.pem,platform.pk8,libconscrypt_openjdk_jni.so,放到同一目錄下,例如放到vendor/mediatek/proprietary/packages/apps/xxx,進(jìn)入xxx目錄下后執(zhí)行下面的命令即可。
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk app_sign.apk
參考鏈接:
Android8.1源碼下對APK進(jìn)行系統(tǒng)簽名
給一個(gè)apk簽系統(tǒng)簽名
如何獲得系統(tǒng)權(quán)限--解決no conscrypt_openjdk_jni in java.library.path錯(cuò)誤
Android 8.0系統(tǒng)給第三方apk進(jìn)行系統(tǒng)簽名(未使用Andriod Studio,在Android系統(tǒng)編譯環(huán)境下簽名)