【问题标题】:How to solve no conscrypt_openjdk_jni in java.library.path error?如何解决 no conscrypt_openjdk_jni in java.library.path 错误?
【发布时间】:2018-01-09 02:53:20
【问题描述】:

我想签署我的apk,所以我执行了以下命令:

java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk ~/Desktop/test.apk

但我收到以下错误:

线程“主”java.lang.UnsatisfiedLinkError 中的异常:否 java.library.path 中的 conscrypt_openjdk_jni java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) 在 java.lang.Runtime.loadLibrary0(Runtime.java:870) 在 java.lang.System.loadLibrary(System.java:1122) 在 org.conscrypt.NativeCryptoJni.init(NativeCryptoJni.java:25) 在 org.conscrypt.NativeCrypto.(NativeCrypto.java:54) 在 org.conscrypt.OpenSSLBIOInputStream.(OpenSSLBIOInputStream.java:34) 在 org.conscrypt.OpenSSLX509Certificate.fromX509PemInputStream(OpenSSLX509Certificate.java:119) 在 org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:220) 在 org.conscrypt.OpenSSLX509CertificateFactory$1.fromX509PemInputStream(OpenSSLX509CertificateFactory.java:216) 在 org.conscrypt.OpenSSLX509CertificateFactory$Parser.generateItem(OpenSSLX509CertificateFactory.java:94) 在 org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:272) 在 java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:339) 在 com.android.signapk.SignApk.readPublicKey(SignApk.java:182) 在 com.android.signapk.SignApk.main(SignApk.java:1087)

如何解决这个错误?

(openjdk 版本“1.8.0_141” OpenJDK 运行时环境 (build 1.8.0_141-8u141-b15-3~14.04-b15) OpenJDK 64 位服务器 VM(内部版本 25.141-b15,混合模式) )

【问题讨论】:

    标签: android compiler-errors apk linker-errors sign


    【解决方案1】:
    java -Xmx2048m -Djava.library.path="out/host/linux-x86/lib64" \
        -jar out/host/linux-x86/framework/signapk.jar \
        -w build/target/product/security/platform.x509.pem \
        build/target/product/security/platform.pk8 \
        FileNeedSign.apk FileNeedSign_Signed.apk
    

    【讨论】:

    • 即使这是公认的更有帮助的答案,请在您的答案中添加说明以及其他参数解决问题的原因
    【解决方案2】:

    我正在使用 Jetty、Kotlin、Java 8 和 Maven。我的解决方案是双重的。首先在 pom.xml 中,添加 Conscrypt:

    <dependency>
        <groupId>org.conscrypt</groupId>
        <artifactId>conscrypt-openjdk</artifactId>
        <version>2.2.1</version>
        <classifier>linux-x86_64</classifier>
    </dependency>
    

    注意&lt;classifier&gt;,它需要适合您的操作系统。从这里的列表中选择一个:https://github.com/google/conscrypt/

    我喜欢将我的配置直接放入代码中。喜欢就给我发火。我按照这里的说明进行操作:https://www.eclipse.org/jetty/documentation/current/configuring-ssl.html#conscrypt 所以在设置 Jetty 的 sslContextFactory 之前,我必须添加:

        Security.addProvider(new OpenSSLProvider())
    

    然后:

        // SSLv2Hello and SSLv3 are outdated and insecure.
        // TLSv1.3 works with Conscrypt, but not Java 8!
        sslContextFactory.setExcludeProtocols("SSLv2Hello", "SSLv3", "TLSv1.3")
        sslContextFactory.setProvider("Conscrypt");
    

    我认为这就是清除它的原因。我今天做了很多改变。

    我有一个单独的问题,即我的 localhost SSL 证书无效。我从这个开始:Can you use a service worker with a self-signed certificate?,但最终从服务器获取证书并编辑我的 /etc/hosts 文件以使 localhost 看起来像那个服务器。

    【讨论】:

      猜你喜欢
      • 2023-02-12
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      相关资源
      最近更新 更多