Android studio Android Studio/Gradle没有打包名为“的共享库”;mylib.so.1“;在APK

Android studio Android Studio/Gradle没有打包名为“的共享库”;mylib.so.1“;在APK,android-studio,android-ndk,Android Studio,Android Ndk,我需要将一个名为“mylib.so.1”的共享库打包到APK中,但显然gradle无法识别“.so.1”扩展名,只有“.so”,在运行时,我需要名为“.so.1”的库以避免链接器错误。所有lib都在src/main/jniLibs/${ANDROID_ABI}中。您需要将后缀精确设置为。因此。因此,请删除冗余的.1我可以通过以下方式将版本控制的.So文件打包为资源: sourceSets.main { resources.srcDir 'src/main/external' } 在ap

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

您需要将后缀精确设置为。因此。因此,请删除冗余的.1

我可以通过以下方式将版本控制的.So文件打包为资源:

sourceSets.main {
    resources.srcDir 'src/main/external'
}
app.gradle
中的
android
块内。或者可以使用
resources.srcDirs+=['src/main/anywhere']

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


不过,有点讽刺的是,它似乎没有复制假定为库的文件(即匹配*.so的文件,可能还有其他文件)。因此,您必须将.So放在
src/jniLibs

中。如果我这样做,在运行时,我会在logcat中得到一个链接器错误,“mylib.So.1缺失”。您需要删除后缀,并重新链接任何与之链接的内容。仅在生成后删除后缀是不够的。还要检查库的SONAME是否正确(请遵循)。