Android Studio:缺少条带工具

Android Studio : Missing Strip Tool

我在使用终端命令 gradle clean assembleRelease:

构建我的 android 工作室代码时不断收到此警告

Unable to strip library 'lib.so' due to missing strip tool for ABI 'ARMEABI'. Packaging it as is.

请帮我解决这个警告。

注意:我知道这不会影响我的应用程序的行为,但我的 APK 太大了,这肯定会帮助我减小 APK 的大小。所以我需要解决这个问题。

您可以尝试在app/build.gradle.

中使用以下配置
android {    
    packagingOptions {
        // exclude ARMEABI native so file, ARMEABI has been removed in NDK r17.
        exclude "lib/armeabi/**"
    }
}

Remove (or make optional) MIPS native library #3504
Android-ABIs

默认安装的 NDK 似乎没有删除使用 ARMEABI 支持构建的二进制文件所需的工具,因此它最终打包了整个库,这大大增加了构建文件的大小。

我发现从 Android Studio -> Tools -> SDK Manager -> SDK Tools 安装 "NDK (Side by side)" 工具可以处理这个警告并减少构建的 APK 大小,尤其是对于 React Native 项目。

安装 NDK 的步骤(并排)

  • 打开Android Studio
  • 点击Configure/ Tools
    • 点击SDK Manager
      • 单击 SDK Tools 选项卡
        • Select 下面:
          • NDK (Side by side)
          • CMake
          • Android SDK Command-line Tools (latest)
        • Apply

注意:Android SDK Command-line Tools (latest) 不是必需的,但我安装了它,这样我就不必搜索更多解决方案,今天对 运行 一个新的 React Native 应用程序进行了很多故障排除.

更多信息:https://developer.android.com/studio/projects/install-ndk

针对 React Native 的可能解决方案:

我在尝试通过执行 cd android/ && ./gradlew assembleDebug(没有打开 Android Studio)从命令行构建我的 React Native 应用程序时遇到了这个问题。

我打开了 Android Studio,我在那里构建了应用程序,它自动修复了问题。一旦我通过命令行再次尝试,问题就不再发生了。

我想合并所有现有答案并添加更多 explanation/details。

首先,就像其他人提到的一样,检查您是否安装了 Android NDK(NDK(并排)在 Android Studio -> 工具 -> SDK 管理器 -> SDK工具)。但这仍然不足以修复此警告。

Android NDK 有一个 supported ABIs 的列表,它有一条注释说 'armeabi' 不再受支持:

Historically the NDK supported ARMv5 (armeabi), and 32-bit and 64-bit MIPS, but support for these ABIs was removed in NDK r17.

因此,如果您的应用需要支持 ARMv5/6 设备(这不太可能 - 这些设备已经很旧了),您应该:

  • 使用支持 'armeabi' ABI 的旧版 NDK
  • 忽略警告。在这种情况下,即使使用较新的 NDK,该库仍可在较旧的设备上运行 但是 将为每个 ABI 打包在 APK 中,包括较新的 ABI(这会导致 APK 大小增加)

如果没有必要支持 ARMv5/6,您可能仍希望支持 ARMv7 ABI 'armeabi-v7a'。同样,有两个选项:

  • 使用支持 'armeabi-v7a' ABI
  • 的较新 Android NDK 重新编译共享库
  • (不推荐) 将 'armeabi' 文件夹重命名为 'armeabi-v7a' (我不确定这些 ABI 的库是否兼容或不)

如果库不属于您,您可能应该要求其维护者修复它。

但如果不需要支持 ARMv7,请随意排除库:

android {    
    packagingOptions {
        exclude "lib/armeabi/**"
    }
}