【问题标题】:Android NDK. Decrease size of APK安卓 NDK。减小 APK 的大小
【发布时间】:2014-03-05 19:59:33
【问题描述】:

我使用 Android NDK 为 Android 编译了一个应用程序。我有两个项目。首先 - 是一个带有 ndk 库和 jni 文件夹的库。第二 - 是我的工作应用程序,其中包括第一个项目作为库。我的应用程序对我来说太大了(30Mb)。我想减少它。我阅读了教程,但他们告诉我要做一些基本的选择,比如删除日志和未使用的代码等。但这对我没有帮助。我可以用我的所有 .c 文件删除 jni 文件夹吗(如果我在最终构建中是正确的,它们是不必要的,因为它们被编译成 .so 库),或者这不会减小 apk 的大小?或者我应该做点别的吗?感谢您对我的问题感兴趣!

【问题讨论】:

  • 标准 android 版本只复制 .so 文件。它不会复制任何 .c 源文件或头文件。您可能想要调查其他资产的大小,例如艺术品。您可以使用7zip 等工具打开apk 文件,并调查哪些文件占用的空间最多。如果这没有帮助,您可能需要调查 OBB 文件的使用情况,您可以在其中存储其他数据。 developer.android.com/google/play/expansion-files.html
  • 谢谢你,tillaert。我会尝试这些解决方案。

标签: java android c++ android-ndk


【解决方案1】:

您可以像这样在 build.gradle 文件中启用 ABI 拆分:

android {
    // Some other configuration here...

    splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi', 'armeabi-v7a', 'mips'
            universalApk false
        }
    }
}

这将大大减少您的应用程序大小。

原因是现在 Gradle 将为每个 CPU 生成一个 APK,进一步减小了大小!

在我的情况下,它将我的 apk 文件大小从 5.4mb 减少到 3.2mb。

【讨论】:

    【解决方案2】:

    您还可以检查任何使用过的第三方库,看看是否有任何不必要的扩展可能被禁用。

    我曾经使用过完全支持所有加载程序的 assimp,它为我的应用程序增加了 10MB 以上。 通过从中删除不必要的模块,结果就不会那么臃肿了。

    【讨论】:

    • 感谢您的回答。我会检查这些扩展程序
    【解决方案3】:

    如果你的Application.mk 有一行

    APP_ABIS = all
    

    或类似的,考虑为不同平台(armeabi、armeabi-v7a、x86、mips)提供单独的 APK。

    技术细节在Android - build separate APKs for different processor architectures

    中详细讨论

    【讨论】:

    • 这似乎是一个非常有趣的链接,因为我每个平台的每个库都有很大的尺寸。我会检查链接!
    【解决方案4】:

    你应该看看:

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多