【问题标题】:Adding a .so file in Android Studio在 Android Studio 中添加 .so 文件
【发布时间】:2013-05-23 04:59:59
【问题描述】:

我正在尝试添加一个外部库 Scandit。我不断收到此错误:

    java.lang.UnsatisfiedLinkError: Couldn't load scanditsdk-android-3.3.1 from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.clover.barcode2-1.apk,libraryPath=/data/app-lib/com.clover.barcode2-1]: findLibrary returned null
    at java.lang.Runtime.loadLibrary(Runtime.java:365)
   .....

我认为这是因为我没有正确包含库附带的 .so 文件,但我不知道该怎么做。

我正在使用 Android Studio,我通过转到模块设置 -> 库添加了库,并添加了带有 jar 的目录和带有 so 文件的目录。

【问题讨论】:

  • 怎么把.so添加到什么目录下?
  • 我只是添加了它所在的目录,因为我不知道如何添加它。它们都位于 /libs
  • 从android项目外的目录中添加一个.so文件:stackoverflow.com/questions/50713933/…

标签: android android-studio


【解决方案1】:

您可以使用 gradle 0.7.2+ 在 Android Studio 中添加预构建的 *.so 文件。首先在/app/src/main/这个位置创建jniLibs,并复制jniLibs中所有带有*.so文件(armeabi、armeabi-v7a、mips、x86)的文件夹。

【讨论】:

  • 兄弟,你救了我的命,我正在努力 2½ 小时,工作完美,所有奇怪的错误都消失了,感谢您分享您的智慧。 @Josh Wilson 您可以标记为解决方案吗?
  • @TGMCians 你能告诉我们编译.so文件需要的gradle代码吗。
  • Thaaaaaaaaaaaaaaanks 你帮了很多忙。
  • 你能指导我在我的android项目中添加用C编写的lib吗。
  • @TGMCians 你太棒了.. :)
【解决方案2】:

使用本机库(so 文件) 您需要在“build.gradle”文件中添加一些代码。

此代码用于在“清理项目”时清理“armeabi”目录并将“so”文件复制到“armeabi”中。

task copyJniLibs(type: Copy) {
    from 'libs/armeabi'
    into 'src/main/jniLibs/armeabi'
}
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn(copyJniLibs)
}
clean.dependsOn 'cleanCopyJniLibs'

我是从下面提到的。 https://gist.github.com/pocmo/6461138

【讨论】:

  • 别忘了添加 armeabi-v7 和 x86!
【解决方案3】:

我的项目中有一个 libs 文件夹,其中包含了外部库,在 gradle 的构建文件中将行 compile fileTree(dir: 'libs', include: '*.jar') 添加到依赖项 {} 中。

然后我创建了一个 lib 文件夹,并在其中创建了一个 armeabi 文件夹,我在其中插入了所有需要的 .so 文件。然后我将文件夹压缩成 .zip(zip 文件中的结构现在是 lib/armeabi/*.so)我将 .zip 文件重命名为 armeabi.jar 并将其作为外部库添加到 libs 文件夹中。

【讨论】:

    【解决方案4】:

    我认为这是新的 gradle 构建系统的问题。试试这个answer.的解决方案还有一个google group讨论的链接,它更详细地描述了解决方案和问题。

    【讨论】:

      【解决方案5】:
      splits {
          abi {
              enable true
              reset()
              include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a', 'armeabi'
              universalApk false
          }
      }
      

      我从 facebook fresco library 得到这个代码

      【讨论】:

      • 这段代码不是根据依赖系统将 apk 拆分成更小的部分,从而减小 apk 的整体大小吗?
      猜你喜欢
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2016-02-07
      • 2015-01-20
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多