📌  相关文章
📜  如何在 Android Studio 中包含 *.so 库?

📅  最后修改于: 2022-05-13 01:58:45.097000             🧑  作者: Mango

如何在 Android Studio 中包含 *.so 库?

SO 文件代表共享库。当您用 C 或 C++ 编写时,您将所有 C++ 代码编译到 .SO文件中。 SO 文件是一个共享对象库,可以在 Android 运行时动态加载。库文件较大,通常大小在 2MB 到 10MB 之间。结果,应用程序变得臃肿。另外要记住的是,APK 中需要包含几个.SO 文件,以支持 armeabi 和 x86 等多种架构。 .so文件是 ABI 文件,ABI 代表应用程序二进制接口。 ABI 指定应用程序的机器代码在执行期间应如何与操作系统通信。 NDK 是一个软件开发工具包。因此,文件将与这些定义进行比较。

在 Android Studio 项目中包含 .so 文件

那么,如果您想在您的 Android 应用程序或 Android 项目中包含一些 .so 文件怎么办,有几种方法可以做到这一点,但我们将找到可以帮助您立即获得库的完美方法!继续阅读这篇文章!

方法 #1:创建 JniLibs 文件夹

在您的应用程序中创建一个名为“jniLibs”的文件夹,以及包含您的 *.so 的目录。 “jniLibs”文件夹应该与您的“Java”和“Assets”目录一起建立。

方法二:修改 build.gradle 文件

避免创建新文件夹并在 libs 文件夹中维护您的 *.so 文件是可行!在这种情况下,只需将 *.so 文件放在 libs 文件夹中(例如,遵循与解决方案 1 相同的架构:libs/armeabi/.so)并更新应用程序的 build.gradle 文件以包含 jniLibs 源目录。

方法 #3:将文件放入 ABI 文件夹

将您的 .so 文件放入 libs 文件夹中,如文件夹所示添加它们

图 1. 了解 .jar & so 文件的结构

然后将此代码添加到您的项目中

compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')

方法#4:清理并添加到“armeabi”

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

方法 #5:使用 ABI 过滤器

如果您使用的是 Android Studio 4.1.2,并尝试指定 NDK

Path in File -> Project Structure -> SDK Location

现在您需要在 local.properties 中手动配置 NDK 版本,并使用 ABI及其对应文件建立一个 jniLibs 文件夹。 build.gradle 中的so 文件定义 ABI 过滤器和 NDK 版本。这篇文章就是这样,希望你能找到完美的解决方案来包含 .so 文件!