【问题标题】:Android Studio : Missing Strip ToolAndroid Studio:缺少剥离工具
【发布时间】:2018-11-22 20:28:09
【问题描述】:

我在使用终端命令 gradle clean assembleRelease 构建我的 android studio 代码时不断收到此警告:

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

请帮助我解决此警告。

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

【问题讨论】:

标签: android android-studio arm static-libraries abi


【解决方案1】:

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

我发现从 Android Studio -> 工具 -> SDK 管理器 -> SDK 工具安装“NDK(并排)”工具可以解决此警告并减少构建的 APK 大小,尤其是对于 React Native项目。

【讨论】:

    【解决方案2】:

    您可以尝试在 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

    【讨论】:

    • 所以它只是摆脱了警告。但副作用仍然存在
    • 这样做可能会导致您的应用不再支持 ARMv7。请参阅我的答案以获取更多详细信息。
    【解决方案3】:

    安装 NDK 的步骤(并排)

    • 打开Android Studio
    • 点击Configure/ Tools
      • 点击SDK Manager
        • 点击SDK Tools标签
          • 在下面选择:
            • 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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

        我想结合所有现有答案并添加更多解释/细节。

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

        Android NDK 有一个supported ABIs 列表,其中有一条说明不再支持“armeabi”:

        过去,NDK 支持 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS,但在 NDK r17 中删除了对这些 ABI 的支持。

        因此,如果您的应用需要支持 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/**"
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-15
          • 2015-05-01
          • 2017-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多