最近 android 架构的变化迫使所有开发人员让他们的 android 应用程序支持 64 位。
我已经浏览了文档。但正如它在那里显示的那样,寻找一个可能有“.so”文件的“lib”文件夹。
我尝试了同样的事情,但显然我找不到和“lib”文件夹开始,我的应用程序完全用 java 编写,没有本机(C,C++)代码。
任何人都可以建议我可以做什么,或者我如何确保我的应用程序支持 64 位,或者我将如何获得带有 .so 文件的库。
最近 android 架构的变化迫使所有开发人员让他们的 android 应用程序支持 64 位。
我已经浏览了文档。但正如它在那里显示的那样,寻找一个可能有“.so”文件的“lib”文件夹。
我尝试了同样的事情,但显然我找不到和“lib”文件夹开始,我的应用程序完全用 java 编写,没有本机(C,C++)代码。
任何人都可以建议我可以做什么,或者我如何确保我的应用程序支持 64 位,或者我将如何获得带有 .so 文件的库。
简短的回答:
如果您没有本机 (NDK) 代码,即您只编写 Java/Dex 代码,那么您无需执行任何操作。
如果您有本机代码(或库),那么您需要提供它们的 64 位版本。
详细答案(解释):
Google Play 团队建议采取以下措施:
如果您还没有,我们鼓励您尽快开始满足 64 位要求。许多应用程序完全用非本地代码(例如 Java 编程语言或 Kotlin)编写,不需要更改代码。
请注意,我们不会更改我们的 32 位支持政策。Google Play 将继续向 32 位设备提供具有 32 位本机代码的应用程序。该要求意味着这些应用程序也需要具有 64 位版本。
为了帮助您进行过渡,我们准备了有关如何检查您的应用是否已支持 64 位以及如何成为 64 位兼容的文档。
我们还在下面提供了一个高级时间表。
总结上面引用的段落中提供的文档链接:
如果您的应用仅使用以 Java 编程语言或 Kotlin 编写的代码,包括任何库或 SDK,则您的应用已经准备好用于 64 位设备。如果您的应用程序使用任何本机代码,或者您不确定它是否使用,您将需要评估您的应用程序并采取行动。
......
检查 64 位库的最简单方法是检查 APK 文件的结构。构建后,APK 将与应用程序所需的任何本机库一起打包。本机库存储在基于 ABI 的各种文件夹中。不需要支持每个 64 位体系结构,但对于您支持的每个本机 32 位体系结构,您必须包含相应的 64 位体系结构。
对于 ARM 架构,32 位库位于 armeabi-v7a 中。64 位等效版本是 arm64-v8a。
对于 x86 架构,请查找用于 32 位的 x86 和用于 64 位的 x86_64。
首先要做的是确保您在这两个文件夹中都有本机库....
如果您的 APK 已经有 NDK 代码和 64 位库,请执行以下操作:
大多数 Android Studio 项目都使用 Gradle 作为底层构建系统,因此本节适用于这两种情况。为您的本机代码启用构建就像添加 arm64-v8a 和/或 x86_64 一样简单,具体取决于您希望支持的架构,到您应用程序的“build.gradle”文件中的 ndk.abiFilters 设置:
// Your app's build.gradle apply plugin: 'com.android.app' // Your app's build.gradle apply plugin: 'com.android.app' android { compileSdkVersion 27 defaultConfig { appId "com.google.example.64bit" minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" ndk.abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' // ...
我希望这有帮助。
因此,如果您真的想在本机 java 项目中创建 .so 文件。请按照以下步骤操作:
第 1 步:要安装 NDK、CMake 和 LLDB,请执行以下操作:打开项目后,单击工具 > SDK 管理器。单击 SDK 工具选项卡。安装 NDK、CMake 和 LLDB。第 2 步:在这些步骤之后,在 project/src/main 中创建一个 cpp 文件夹。
第 3 步:在 cpp 文件夹下,添加 native-lib.cpp。
第 4 步:在项目文件夹下创建 SMakeLists.txt 文件。
第 5 步:在 Gradle 中添加 externalLibrary:
android{
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
defaultConfig {
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
externalNativeBuild {
cmake {
cppFlags ""
}
}
}