【问题标题】:Android Studio/Gradle is not packing my shared library named "mylib.so.1" in APKAndroid Studio/Gradle 没有在 APK 中打包名为“mylib.so.1”的共享库
【发布时间】:2018-11-03 06:48:07
【问题描述】:

我需要将名为“mylib.so.1”的共享库打包到 APK 中,但显然 gradle 无法识别“.so.1”扩展名,只能识别“.so”,并且在运行时我需要名为“.so”的库。 so.1" 以避免链接器错误。所有库都在 src/main/jniLibs/${ANDROID_ABI} 中。

【问题讨论】:

    标签: android-studio android-ndk


    【解决方案1】:

    您需要使后缀完全为 .so。所以去掉多余的.1

    【讨论】:

    • 如果我这样做,在运行时我会收到一个链接器错误,logcat 中出现“mylib.so.1 missing”。
    • 您需要删除后缀并重新链接任何与之链接的内容。删除后缀构建是不够的。还要检查库的 SONAME 是否正确(关注stackoverflow.com/a/48291044/632035)。
    【解决方案2】:

    我能够通过将版本化的 .so 文件添加为资源来打包

    sourceSets.main {
        resources.srcDir 'src/main/external'
    }
    

    在app.gradle 的android 块内。或者,可以使用resources.srcDirs += ['src/main/whatever']。

    这会将指定路径中的所有文件复制到包的根目录,因此必须将源库放在src/main/external/lib/armeabi-v7a/libsomething.so.1.2.3 等处才能复制到.apk 或@987654328 中的/lib/armeabi-v7a/libsomething.so.1.2.3 @。

    除了有点讽刺的是,它似乎没有复制假定为库的文件(即与 *.so 匹配的文件,可能还有其他文件)。所以你必须把你的 .so 文件放在src/jniLibs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 2017-02-15
      • 2017-09-19
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      相关资源
      最近更新 更多