如何减少Android上的react-native应用程序大小

时间:2018-04-24 03:29:48

标签: react-native react-native-android expo

我正在开发一个小字典应用程序,通过使用本机与本世纪的反应。

正在编译Apk文件。尺寸上升到30mb,安装在设备上后,它达到80mb。

这是正常的吗?

有没有办法减少应用的尺寸?

谢谢你们。

10 个答案:

答案 0 :(得分:9)

expo用于测试您应该迁移到用于生产的反应原生的应用

  • 制作一个新的反应应用“react-native init

  • 从Expo项目

  • 复制源文件
  • 安装Expo项目的所有依赖项,但不包括Expo特定库。
  • app.json文件
  • 进行必要的调整
  • 使用exp

  • 从Expo下载Android应用的签名密钥
  • fetch:android:keystore并设置



这大大减少了您的应用程序,您还可以为cpu架构启用proguard和特定构建

了解更多信息,请访问https://medium.com/@aswinmohanme/how-i-reduced-the-size-of-my-react-native-app-by-86-27be72bba640

使用expo组件

完成后想要以较小的尺寸发布或者只是想使用本地库展示给你一个名为ExpoKit的选项,这也可以用于已经构建的本机代码反应项目

1-run命令expo eject添加ExpoKit(选择“ExpoKit”选项)
(如果手动复制文件或使用本机项目,则无需执行此操作)
2 -start expo packager with expo start。保持此运行并继续执行以下步骤 3- 用于android和ios的链接库,这个命令主要执行此操作react-native link,有时这不起作用,你应该手动执行此操作,这意味着访问expokit
PS:我没有测试这个,如果这不起作用通知我

答案 1 :(得分:5)

截至 2021 年,现在有一个更简单的选择来减少 Android 二进制文件的大小,因为如果您不这样做,则弹出/迁移到纯 react-native、切换到裸工作流和在本地构建自己的二进制文件需要大量的工作和学习不知道如何去做,或者没有设置好环境和工具。

在 app.json 中,进行以下更改:

ssh-keygen -m PEM -t rsa -b 8192

仅此一项就可以将应用大小减少约 40-50%,具体取决于您的项目。

关于使用这个选项,你应该知道一些事情,所以你应该阅读 https://github.com/expo/fyi/blob/master/managed-app-size.md。它仍然比弹出要容易得多。

最重要的是,在上传到 Play 商店后,您仍应使用应用程序包 (.aab) 再缩小约 50% 的大小:

"expo": { ... "android": { "enableDangerousExperimentalLeanBuilds": true } }

答案 2 :(得分:4)

对位于以下位置的.as-console-wrapper { max-height: 100% !important; top: 0; }文件进行以下更改:

build.gradle

从abi过滤器中删除x86。

./android/app/build.gradle

针对不同架构生成不同的APK

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

启用ProGuard:

def enableSeparateBuildPerCPUArchitecture = true

还要将minifyEnabled设置为true,并将rinkeResources设置为

def enableProguardInReleaseBuilds = true

也不要忘记删除未使用的FONT文件

答案 3 :(得分:4)

对于使用expo的android APK捆绑包,可以使用以下命令:

expo build:android -t app-bundle

一旦您将其上传到Play商店,其大小就会小得多。

答案 4 :(得分:0)

基本上有两个选项可以将apk文件的大小从32mb(expo)减少到7mb(react-native cli)。

  1. 从世博会分离
  2. 创建新的react-native cli项目,并将所有源代码从expo复制到新的react-native项目。

答案 5 :(得分:0)

将expo版本升级到31。最近推出了适用于Android的单一SDK版本。这些内部版本仅包含应用程序在构建时使用的SDK版本,且速度更快,更苗条。它有助于缩小独立应用程序的构建尺寸。 release note

答案 6 :(得分:0)

将react-native升级到较新版本,对于不同版本,它会提供不同大小的apk。

0.57≈12mb

0.59.3≈30mb

对于0.59.9,它是≈15mb

始终尝试使用更新的本机版本

答案 7 :(得分:0)

我使用了上述所有步骤来减小我的应用大小。现在是6.94 MB。如何减少更多。 Google Play上的类似应用程序不到1 MB。

答案 8 :(得分:0)

在这里投票,以便博览会可以调查功能https://expo.canny.io/feature-requests/p/reducing-app-size问题是react-native使用hermes,因此包装类似于android studio的本机android应用程序可以执行的操作,但是由于herme就像是最新的1- 2年展览会团队尚未获得对Hermes的支持,请投票。.我也完全同意@jakobinn

答案 9 :(得分:0)

另一种减小应用程序大小的方法,无需手动将代码复制粘贴到另一个存储库中。在app.json或app.config.js中,只需将其enableDangerousExperimentalLeanBuilds设置为true,通过执行此expo,就不会在运行expo build:android -t app-bundle时安装不必要的节点模块。

如果遇到任何崩溃,请比较启用enableDangerousExperimentalLeanBuilds之前安装的本机节点模块,并仅安装所需的本机节点模块。您可以在expo.io构建工件中找到安装的本机节点模块。

这是一些您可能不需要的,随托管流程一起提供的节点模块

expo-ads-admob:8.3.0 expo-analytics振幅:8.3.1 expo-ads-facebook:8.4.0 expo-analytics-segment:9.0.0 unimodules-constants-interface:5.3.0 expo-app-auth:9.2.0 苹果博览会认证:2.2.1 unimodules-app-loader:1.3.0 unimodules-font-interface:5.3.0 unimodules-image-loader-interface:5.3.0 unimodules-permissions-interface:5.3.0 博览会申请:2.3.0 博览会-av:8.6.0 expo-background-fetch:8.5.0 博览会任务经理:8.5.0 unimodules-task-manager-interface:5.3.0 世博条形码扫描仪:9.0.0 unimodules-barcode-scanner-interface:5.3.0 电池电量:3.0.0 展览模糊:8.2.0 曝光亮度:8.3.0 日历:8.5.0 博览机:9.0.0 unimodules-camera-interface:5.3.0 unimodules-face-detector-interface:5.3.0 unimodules-文件系统接口:5.3.0 细胞外:2.3.0 常量常数:9.2.0 接触人数:8.5.0 博览会加密:8.3.0 博览会设备:2.3.0 expo-document-picker:8.4.0 博览会错误恢复:1.3.0 面部检测器:8.3.0 博览会facebook:9.0.0 博览文件系统:9.2.0 expo-firebase-analytics:2.5.0 expo-firebase-core:1.2.0 博览会字体:8.3.0 博览会gl:9.1.1 expo-gl-cpp:9.1.2 expo-gl-cpp-legacy:8.4.0 expo-google-sign-in:8.3.0 触觉技术:8.3.0 expo-image-loader:1.2.0 博览会图像操纵者:8.3.0 博览会图像选择器:9.1.1 展览许可:9.3.0 应用内购买博览会:9.0.0 展览意图发射器:8.3.0 世博会保持清醒:8.3.0 expo-linear-gradient:8.3.0 本地博览会验证:9.3.0 博览会本地化:9.0.0 展览位置:9.0.0 博览会邮件撰写者:8.4.0 博览媒体库:9.2.1 expo-module-template:8.4.0 博览会网络:2.3.0 博览会通知:0.7.2 expo-payments-stripe:8.3.0 博览会版:9.1.0 博览会屏幕捕获:1.1.1 投影屏方向:2.0.0 博览会安全商店:9.2.0 曝光传感器:9.1.0 unimodules-sensors-interface:5.3.0 博览会共享:8.4.1 博览会短信:8.3.1 博览会演讲:8.4.0 博览会飞溅屏幕:0.6.2 expo-sqlite:8.4.0 世博会商店评论:2.2.0 博览会更新:0.3.3 世博会视频缩略图:4.3.0 expo-web-browser:8.5.0