本机库(.so文件)不添加到一个Android项目

我试图使用需要使用本机库的sqlitecipher库。 他们的教程是非常简单的,但它不适用于我。 每当我得到以下错误:

FATAL EXCEPTION: main java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader[dexPath=/data/app/org.example.test-2.apk,libraryPath=/data/app-lib/org.example.test-2]: findLibrary returned null at java.lang.Runtime.loadLibrary(Runtime.java:365) at java.lang.System.loadLibrary(System.java:535) at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:141) at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:136) 

这意味着.so文件在编译期间没有附加。

所有3个文件都存储在/ libs / armeabi /目录中。

我认为问题在于我使用maven来pipe理依赖关系(无论如何,都是使用Android Studio进行构build的)。 下一次尝试 – 将这些库包含到Maven依赖项中。 根据文件,这很容易。 我找不到他们在公共存储库中,所以我使用<scope>system</scope>标签。 他们是可见的,但没有奏效。 后来发现这个链接的地方说,范围“系统”将无法正常工作,试图将这些库添加到本地存储库使用

 mvn install:install-file -DgroupId=net.sqlitecipher -DartifactId=stlport_shared -Dversion=1.0 -Dfile=libstlport_shared.so -Dpackaging=so -DgeneratePom=true 

最后 – 它没有工作。

另外我看到这个话题 ,可能这是一个解决scheme,但我目前不使用gradle。 有没有办法将.so文件包含到apk中而不需要从maven移动到gradle?

据我了解,Android Studio使用gradle内部构buildapks,所以我所有的努力与maven是没有用的,直到他们开始支持本地库,对不对? 我也尝试用Intellij IDEA Cardea(13.0)来构build这个项目,遗憾的是没有成功。

Solutions Collecting From Web of "本机库(.so文件)不添加到一个Android项目"

一旦本地库位于/ libs / armeabi /你所要做的就是正确configurationandroid插件。 像这样的东西:

 <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <nativeLibrariesDirectory>${project.basedir}/libs</nativeLibrariesDirectory> ... </configuration> <extensions>true</extensions> </plugin> 

问题1 :是的。 以前我没有这个具体的问题,但是大多数时候你都不需要交易。 可以使用一个ant任务将SO文件添加到APK中。 而且,因为maven可以运行Ant任务。

您在这里find的nativeLibsToJar只是一个将所有SO文件放入ZIP文件然后使用扩展JAR而不是ZIP的任务。 你可以很容易地做到这一点与Ant任务Zip (也许另外重命名 )。

问题2 :没有,因为第一个答案。 “maven支持本地库”是不需要的。 只要使用Ant作为构build系统。

你必须创buildjni文件夹.so文件包括在android项目中使用android studio。

我已附加图片,请按照下列步骤操作。

创buildjnilib文件夹后,您可以将所有.so文件放在此文件夹中。 在这里输入图像说明