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

找不到“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 build script下显式指定它。

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

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

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

  • 当我跑步时 $ionic cordova构建android 构建失败,出现此错误: Cordova build android找不到ANDROID_HOME环境变量。尝试设置它 尽管当我跑步时: 科尔多瓦要求 我得到以下结果: android的需求检查结果: Java JDK:已安装1.8.0 Android SDK:安装正确 Android目标:安装android-29、android-28、a

  • 这里是Java 8。我有一个S3 bucket(),其文件夹子结构如下: 以下是文件夹的外观: 我有一个软件可以将图像文件上传到文件夹,然后我正在编写的另一个应用程序应该处理该图像并将其复制到文件夹。我必须执行这个S3副本的代码如下: 当它运行时,我看到以下日志输出: 但是文件夹的最终状态如下所示: 因此,它不是将复制到目录,而是直接在下创建一个新文件,并将其命名为,并可能将图像的二进制内容复制到

  • 所以我的程序终于在它的第一个版本中完成了。我可以在EclipseIDE中毫无问题地运行它,但一旦我将它打包到一个Jar文件中,它就找不到项目中某个文件夹中的文件(声明为源文件夹)。我已经知道,在编译过程中,文件夹结构会发生变化,我尝试过解决这个问题,但它不起作用,我不想坚持这样的解决方法 项目结构: 在我的程序中,我正在访问“配置”中的文件 它工作得非常好,因为文件夹存在于项目中。但编译后就没有了

  • 在Visual Studio 2017中,当点击<kbd>Ctrl</kbd><kbd<F5</kbd>运行我的ASP时。NET Framework Web API服务器,我得到: 在包管理器控制台中运行并不是永久的修复,因为当包文件丢失时,服务器错误会再次出现。我如何一劳永逸地摆脱此错误,以便在我重新打开、构建和运行我的Visual Studio解决方案时自动(默默地)重新安装所需的包? 重现错

  • 我正在尝试将xlsx文件从文档文件夹保存到应用程序文件夹。这是代码,但显示错误: 错误Domain=nscocaerordomain Code=260“无法打开文件”file1.xlsx,“因为没有这样的文件。”UserInfo={NSFilePath=file:///private/var/mobile/Containers/Data/Application/8AC91C23-3662-44FF