【问题标题】:android - can not load generated native library [duplicate]android - 无法加载生成的本机库[重复]
【发布时间】:2018-06-24 00:34:20
【问题描述】:

我目前正在 android studio 3.0.1 中开发一个支持 cpp 的 android 库。 因此,我开始进行一些测试以检查功能并得到以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no native-lib 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 com.pmdtec.testproject.TestClass.<clinit>(TestClass.java:6)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:107)

我的源文件是:

TestProject/app/src/java/com/example/TestClass.java

package com.example;

public class TestClass
{
    static {
        System.loadLibrary("native-lib");
    }

    public static void main(String[] args)
    {
        new TestClass().helloNative();
    }

    native void helloNative();
}

TestProject/app/src/cpp/native-lib.cpp

#include <jni.h>

extern "C"
JNIEXPORT void JNICALL
Java_com_example_TestClass_helloNative(JNIEnv *env, jobject instance)
{
    // implement later
}

我还在 TestProject/gradle.properties 中添加了“android.enableAapt2=false”,因为 gradle 构建出现了这个错误(这个错误不再发生。我只是想记录一下,以及为什么我将属性添加到gradle.properties)

Information:Gradle: Executing tasks: [:app:assembleDebug]
Information:Gradle: BUILD FAILED in 4s
Information:15.01.2018 11:46 - Compilation completed with 5 errors and 0 warnings in 6s 736ms
Error:Gradle: failed to create directory 'D:\workspace\TestProject\app\build\generated\source\r\debug\com\example'.
Error:Gradle: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Gradle: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Gradle: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Gradle: Execution failed for task ':app:processDebugResources'.
> Failed to execute aapt

此处未显示的文件是生成的文件。 所以我的问题是,有人知道为什么我会在这篇文章的顶部收到错误提示吗?


更多细节:

生成的 .apk 包含以下文件

/lib/arm64-v8a/libnative-lib.so
/lib/armeabi-v7a/libnative-lib.so
/lib/x86/libnative-lib.so
/lib/x86_64/libnative-lib.so
/META-INF/...
/res/...
AndroidManifest.xml
classes.dex
resources.arsc

有什么我必须做的,所以连接了native-lib吗?

非常感谢您的支持!

亲切的问候 罗伯特·A·弗里奇

【问题讨论】:

  • "编译完成,出现 5 个错误..."您需要找到这些记录的位置。
  • 您的 TestClass 具有 package com.example; 但您的 JNI 调用将其声明为 com.pmdtec.testproject.TestClass - 这些需要匹配。所以要么重构你的项目,要么修复你的 JNI 导出名称。
  • @Shark 对,那是通过编辑。对不起。
  • @richard-critten 我认为不需要 aapt。我只是指出我禁用它是为了避免这个错误。
  • @thomas-mary 我不认为这是重复的。 .apk 中生成的 libnative-lib.so 被放置在 lib 中,因此会自动链接。还是我错了?

标签: java android c++ java-native-interface


【解决方案1】:

感谢大家阅读我的问题。 事实证明,我必须在设备上运行我的代码。 如果您使用 android 构建它,则无法通过 main-method 测试原生代码。

亲切的问候 罗伯特·A·弗里奇

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 2015-09-30
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2013-04-23
    相关资源
    最近更新 更多