1

最近 android 架构的变化迫使所有开发人员让他们的 android 应用程序支持 64 位。

我已经浏览了文档。但正如它在那里显示的那样,寻找一个可能有“.so”文件的“lib”文件夹。

我尝试了同样的事情,但显然我找不到和“lib”文件夹开始,我的应用程序完全用 java 编写,没有本机(C,C++)代码。

任何人都可以建议我可以做什么,或者我如何确保我的应用程序支持 64 位,或者我将如何获得带有 .so 文件的库。

4

2 回答 2

1

简短的回答:

如果您没有本机 (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'   
// ...

我希望这有帮助。

于 2019-08-22T17:59:18.017 回答
0

因此,如果您真的想在本机 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 ""
    }
}

}

于 2019-10-03T20:44:37.587 回答