当前位置: 首页 > 知识库问答 >
问题:

无法找到“libmynative.so”,即使它被复制到libs文件夹(Android NDK)

甄阿苏
2023-03-14

我成功地将“libmynative.so”文件夹复制到armeabi文件夹

[armeabi] Compile++ thumb: mynative <= helloworld.cpp
[armeabi] Compile++ thumb: mynative <= jni_entry.cpp
[armeabi] SharedLibrary  : libmynative.so
[armeabi] Install        : libmynative.so =>libs/armeabi/libmynative.so

我仍然得到以下错误

02-20 01:01:22.949 10851-10851/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.lol.jnihelloworld, PID: 10851
                                               java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.lol.jnihelloworld-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libmynative.so"
                                                   at java.lang.Runtime.loadLibrary(Runtime.java:366)
                                                   at java.lang.System.loadLibrary(System.java:988)
                                                   at com.lol.jnihelloworld.MainActivity.<clinit>(MainActivity.java:19)
                                                   at java.lang.reflect.Constructor.newInstance(Native Method)
                                                   at java.lang.Class.newInstance(Class.java:1606)
                                                   at android.app.Instrumentation.newActivity(Instrumentation.java:1089)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2240)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

这是我的主要活动

package com.lol.jnihelloworld;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;


public class MainActivity extends Activity {


public native String getNativeMessage();


static {
    System.loadLibrary("mynative");
}


Button btnInvokeJNI;
TextView tvNativeMsg;


/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    btnInvokeJNI = (Button) findViewById(R.id.btnInvokeJni);
    tvNativeMsg = (TextView) findViewById(R.id.txtJniText);


    btnInvokeJNI.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tvNativeMsg.setText(getNativeMessage());
        }
    });
}

共有1个答案

谢嘉
2023-03-14

如果您使用的是Android studio,默认的jni库目录不是libs,您必须在gradle构建脚本中显式指定它。

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = []
}

此外,在构建完成后,您可以检查是否将本机库构建到您的APK中。

$ unzip -l app-debug.apk |grep mynative
 类似资料:
  • 我成功地将“libmynative.so”文件夹复制到armeabi文件夹 但我仍然得到以下错误 这是我的主要活动 }

  • 我有一个多模块maven项目,我想为每个模块创建和发布一个映像,除了一个通用的实用程序模块,它是所有其他模块的依赖项。 项目结构如下: 为了构建一个fox示例中的module\u,我需要将common\u module文件夹也复制到容器中,并首先在common文件夹上运行mvn install。如果已经构建好,我可以在模块a

  • 问题内容: 我正在Swift中构建一个简单的程序,它应该将具有特定扩展名的文件复制到另一个文件夹中。如果该文件夹存在,程序将只将它们复制到该文件夹​​中;如果该文件夹不存在,则程序必须先将其复制。 运行此代码将正确识别MTS文件,但会导致“添加失败…”,我在做什么错? 问题答案: 从文档中: 放置的副本的路径。此路径必须在新位置包含文件或目录的名称。… 您必须将文件名附加到调用的目标目录中 (为S

  • 我有一个Windows文件夹结构和文件,如下所示 c:\源文件\file1.txt c:\源文件夹\subfolder1\file2.txt c:\源文件夹\子文件夹2\file3.txt 我想复制所有文件到目标文件夹,如下所示 c:\DestinationFile\file1.txt c:\DestinationFile\file2.txt c:\DestinationFile\file3.tx

  • 问题内容: 我从阅读了以下文档,但它说,但是当我将index.html文件放在 字符串下时,才呈现出来。目前在下,我 正在使用。 MvcConfiguration Restful Service for index page 在我的IDE控制台上,我确实看到了 从打印的内容 ,并且在Chrome开发工具中的网络下面看到了该内容,但我只能 看到。 index.html 问题答案: Spring Bo

  • 大约1个月前,我仍然可以运行TeamCity服务器,但到目前为止,它说Java1.8版的可执行文件找不到。 我设置了环境变量: JAVA\U HOME=C:\Program Files\JAVA\jdk-11.0.1 JRE\u HOME=C:\Program Files\Java\jre1.8.0\u 192 CATALINA_HOME=C:\apache-tomcat-9.0.12 在Path