如何解决java.library.path中没有conscrypt_openjdk_jni的错误?

13
我想给我的apk签名,所以我执行了以下命令:
``` java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk ~/Desktop/test.apk ```
但是我遇到了以下错误:
``` 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.(NativeCrypto.java:54) at org.conscrypt.OpenSSLBIOInputStream.(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) ```
如何解决这个错误?
(openjdk 版本“1.8.0_141” OpenJDK 运行时环境(版本 1.8.0_141-8u141-b15-3~14.04-b15) OpenJDK 64-Bit 服务器 VM(版本 25.141-b15,混合模式))
2个回答

17
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

11
尽管这是被接受的答案,为了更有帮助,请在您的答案中添加描述以及额外参数修复问题的原因。 - Ali Ezzat Odeh
要查找您的java.library.path,请在cmd中键入以下内容:java -XshowSettings:properties(向上滚动以查找库路径,当您使用该命令时,它还将显示帮助选项) - Shah
没有帮助Windows10:仍然在java.library.path中找不到conscrypt_openjdk_jni-windows-x86_64。 - Alexey Kolosov
我也无法帮助解决Windows10的问题:java.library.path中仍然没有conscrypt_openjdk_jni-windows-x86_64。 - kishan verma
在Linux上对我起作用,只需使用-Djava.library.path="sdk/tools/linux/lib64"参数。但是,在克隆Android SDK存储库之后才能正常工作: git clone https://android.googlesource.com/platform/prebuilts/sdk - santiago

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>

请注意<classifier>参数需要根据您的操作系统选择正确的。您可以从这里的列表中选择一个: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");

我认为这就是解决问题的原因。我今天进行了许多更改。
我还遇到了一个问题,我的本地SSL证书无效。我从这里开始:使用自签名证书可以使用服务工作者吗?但最终从服务器中获取了证书,并编辑了我的/etc/hosts文件,使localhost看起来像那个服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接