在 android studio 中引用 .so 文件时遇到问题

Posted

技术标签:

【中文标题】在 android studio 中引用 .so 文件时遇到问题【英文标题】:Trouble referencing a .so file in android studio 【发布时间】:2017-04-28 10:44:56 【问题描述】:

所以我正在尝试将 CLE 集成到 android 中,因此我必须添加一些 .so 文件。我正在关注here的教程

在集成 Star 库之前一切正常,但是当我运行程序时出现以下异常:

Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "/data/data/com.srplab.starcore/lib/libstar_java.so" not found

现在为了包含这些 .so 文件,我创建了一个文件夹 jniLibs 并为 3 个架构放置了 .so 文件:

我在 build.gradle 中添加了以下代码行:

 sourceSets
            
                main
                        

                            jniLibs.srcDirs = ['src/main/jnilibs']

                        
            

但是,当我再次运行以下代码时:

try 
            //System.loadLibrary("mysharedlibrary");
            System.load("/data/data/"+getPackageName()+"/libstar_java.so");
         catch (UnsatisfiedLinkError use) 
            Log.e("JNI", "WARNING: Could not load libmysharedlibrary.so");
            use.printStackTrace();
        

我遇到了一个异常,这意味着 .so 文件没有加载。

这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

您的“armeabi-v7a”文件夹必须重命名为“armeabi-v7a”。 也有错别字:

jniLibs.srcDirs = ['src/main/jnilibs']

你的文件夹是大L:

jniLibs.srcDirs = ['src/main/jniLibs']

顺便说一句,“src/main/jniLibs”默认用于原生库,您不必在 gradle 脚本中指定它。上面没有完整的代码块,但是您是否从静态初始化程序加载您的库?喜欢:

static 

    System.loadLibrary("star_java"); 
  

并查看您的 apk 以确保您的库已成功收集。你可以在app/build/outputs/apk/看到它

【讨论】:

以上是关于在 android studio 中引用 .so 文件时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

在 android studio 中引用 .so 文件时遇到问题

Android studio——正确引用jar包和so文件

Android Studio工程引用第三方so文件

Android NDK——使用Android Studio引用so库,jar包及module并使用JNI的正确姿势

Android Studio指定引用jnilibs 特定CPU架构的so库文件

Android Studio2.2.3 通过JNI引用ffmpeg库小结