Android編譯報錯java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni in java.library.path

不久前遇到一個問題,編譯framework的時候出現瞭如下異常:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no conscrypt_openjdk_jni in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:25) at org.conscrypt.NativeCrypto.<clinit>(NativeCrypto.java:54) at org.conscrypt.OpenSSLBIOInputStream.<init>(OpenSSLBIOInputStream.java:34) at org.conscrypt.OpenSSLX509Certificate.fromX509PemInputStream(OpenSSLX509Certificate.java:119) at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:220) at org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:216) at org.conscrypt.OpenSSLX509CertificateFactory$Parser.generateItem(OpenSSLX509CertificateFactory.java:94) at org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:272) at java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339) at com.android.signapk.SignApk.readPublicKey(SignApk.java:182) at com.android.signapk.SignApk.main(SignApk.java:1087) ninja: build stopped: subcommand failed. build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed make: *** [ninja_wrapper] Error 1
大意是說java.library.path找不到conscrypt_openjdk_jni這個so。
網上有很多解決方案,都是說怎麼對apk進行簽名。編譯整機framework的過程中這些簽名的過程都是自動進行的,這個解決方案一開始就是錯的,害我花了不少時間,害人不淺。
一番谷歌之後,發現既然是java.library.path找不到conscrypt_openjdk_jni這個so文件,那麼理論上只需要在java.library.path放入缺少的so即可。在終端執行以下命令:

java -XshowSettings:properties

查看java.library.path具體路徑在哪裏:

java.library.path = /usr/local/lib
        /usr/java/packages/lib/amd64
        /usr/lib/x86_64-linux-gnu/jni
        /lib/x86_64-linux-gnu
        /usr/lib/x86_64-linux-gnu
        /usr/lib/jni
        /lib
        /usr/lib

把so複製到/usr/local/lib以及/usr/lib這兩個路徑下,問題沒有解決。
推測是在編譯某個mk文件有問題,在編譯代碼的時候修改了java.library.path的值。於是在代碼根目錄下執行mma -j4重新編譯整機代碼後再編譯framework,問題解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章