繁体   English   中英

减少反应原生 android 中的 Apk 大小

[英]reducing Apk size in react native android

目前我的应用程序大小为 17 MB。 但只有2个主屏幕。 每个屏幕包含 3 个子屏幕。 所以总共有6个屏幕。

My package.json :
  "dependencies": {
    "@react-native-community/async-storage": "^1.11.0",
    "@react-native-firebase/app": "^7.2.0",
    "@react-native-firebase/auth": "^8.0.4",
    "@react-native-firebase/firestore": "^7.1.5",
    "@react-navigation/native": "^5.5.0",
    "@react-navigation/stack": "^5.4.1",
    "firebase": "^7.15.0",
    "react": "16.11.0",
    "react-native": "0.62.2",
    "react-native-animatable": "^1.3.3",
    "react-native-asyncstorage": "^1.0.0",
    "react-native-dropdown-picker": "^3.0.0",
    "react-native-floating-action": "^1.20.0",
    "react-native-keyboard-done-button": "^1.0.0",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-loading-spinner-overlay": "^1.1.0",
    "react-native-numeric-input": "^1.8.3",
    "react-native-safe-area-context": "^3.0.2",
    "react-native-screens": "^2.8.0",
    "react-native-scrollable-tab-view": "^1.0.0",
    "react-native-tag-input": "0.0.21",
    "react-native-vector-icons": "^6.6.0",
    "react-navigation": "^4.3.9",
    "react-navigation-stack": "^2.7.0"
  }

我的反应原生版本: "version": "0.62.2"

我将这两个设置为true:

def enableSeparateBuildPerCPUArchitecture = true
def enableProguardInReleaseBuilds = true

当我使用 android studio 检查应用程序分析器时。 我得到了这个:这里

我不确定什么是libjsc.so, libflipper.sp以及为什么它会消耗这么多 memory。 我是新手,这是我的第一个应用程序。 任何帮助都会很棒。

我也想知道因为react-native-scrollable-tab-view (top tab view), react-native-vector-icons, react-native-tag-input (just some tag input lib)我的应用程序大小增加了?

谢谢

我强烈建议您查看Android App Bundles 它们可能是减小 APK 大小的最有效方法。

它的工作方式是您编译并上传您的捆绑包到 Play 商店,然后 Google 的服务器将使用您的生产密钥库为您的应用程序的每个可能的设备变体创建不同的 APK。 因此,当有 xhdpi 屏幕的人,他们下载的 APK 没有 hdpi、xxhdpi 或 xxxhdpi 资产时,他们只会获得 xhdpi。 另一个大的节省是您不必为您的本机 CPU 架构下载所有已编译的代码。 如果有人有 armv7 设备,他们只下载 armv7 本地编译。

我的团队已经能够通过这种方法实现显着的节省,从 25 MB 的 APK 文件到我们的用户只需要下载 10-12 MB 的 APK。

应用程序包的设置很麻烦,对于现有的应用程序来说可能很复杂,但你只需要做一次,这是值得的。

libjsc.so是在设备上运行 React Native 的 javascript 引擎。 我认为爱马仕是这个的新替代品。

libflipper.sp可能与 Flipper 调试应用程序有关。 它默认添加到新的反应原生应用程序中。 https://fbflipper.com/

这是一个关于 android 和 React Native 内部工作原理的好资源。 https://medium.com/@yushulx/react-native-for-android-basic-knowledge-before-coding-83f5d15d7d65

React Native 通常会大大增加应用程序的大小。 最好我能说有必要在 Java/Kotlin 主干之上包含一个运行 javascript 的 RN。 您也许可以删除应用程序的鳍状肢部分。 但它实际上是一个非常好的工具。

此外enableSeparateBuildPerCPUArchitechture应该产生多个 apk 文件。 如果您没有在那里获得多个 apk 文件,那么您实际上并没有拆分架构库。

每次添加库时,您都会增加 apk 的大小。

专业提示:不要在依赖项上使用^ 尤其是 React Native 的。 React Native 是一个快速移动的野兽,并且经常中断。 如果您使用^ ,您可能会在库升级时接受重大更改。 当您在 React Native 中有很多依赖项时,这些更改可能很难追踪。

试试这个命令 cd android。 gradlew bundleRelease,它将创建 aab 格式。 以下是应用商店中 Android App Bundle 优于 APK 的优势

1)更小的下载大小 2)按需应用程序功能 3)仅资产模块

在我的示例中,我的应用程序大小为 25 MB,并且减少了 70%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM