如何在 Android 上减小 expo/react-native 应用程序的大小

Posted

技术标签:

【中文标题】如何在 Android 上减小 expo/react-native 应用程序的大小【英文标题】:How to reduce the size of an expo/react-native app on Android 【发布时间】:2018-10-04 04:52:18 【问题描述】:

我正在使用 react native 和 expo 开发一个小型字典应用程序。

因为我正在编译为 Apk 文件。大小高达 30mb,安装在设备上后,大小达到 80mb。

这正常吗?

有什么方法可以减小应用程序的大小?

谢谢你们。

【问题讨论】:

你检查图像了吗? 图片不超过 1mb 【参考方案1】:

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

expo build:android -t app-bundle

上传到 Play 商店后,尺寸会小很多。 这与 React Native SDK 32 及更早版本相关。

【讨论】:

这是迄今为止最好的答案 - 将我的应用程序从 47MB 减少到 25MB,我所要做的就是调用一个稍微不同的构建命令。 是的,到目前为止最好的答案!我的应用程序从 30MB 变成了 12MB!谢谢!!!这应该是公认的答案! 所以在世博会构建下载上的大小会相同吗?然后减少上传到游戏商店? 25MB 也很高 @rajithShetty 你得到答案了吗?世博会构建的大小 b 是否相同,然后在上传到 Play 商店时会减小?【参考方案2】:

expo 用于开发应用程序,您应该迁移到 react-native 用于生产

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

从 Expo 项目复制源文件

安装 Expo 项目的所有依赖项,除了 Expo 特定库。

app.json文件进行必要的调整

使用 exp 从 Expo 下载您的 Android 应用的签名密钥

fetch:android:keystore 并设置它

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

buildTypes 
    release 
        debuggable false
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    
 

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

使用博览会组件

在您完成并希望以较小的大小发布或只是不想使用本机库博览会后,为您提供一个名为 ExpoKit 的选项,这也可以用于已经使用本机代码构建的 react 项目

1-运行命令expo eject 添加ExpoKit(选择“ExpoKit”选项) (如果您手动复制文件或使用本机项目,则无需这样做) 2 - 使用 expo start 启动 expo 打包程序。让它运行并继续执行以下步骤。 3- android和ios的链接库,这个命令主要是这样做react-native link,有时这不起作用,你应该手动这样做,因为这意味着访问expokit PS:我没有对此进行测试,所以如果这不起作用,请通知我

【讨论】:

效果很好,从 32mb 减少到 9mb。而且,甚至 7mb。太棒了。 效果很好,从 32mb 减少到 9mb。而且,甚至 7mb。惊人的。然而,另一个问题是当它安装在设备上时,它会上升到 22mb。我该如何解决这个问题? 如何在新项目中使用 expo 特定库? 请详细说明如何执行此操作:安装 Expo 项目的所有依赖项,除了 Expo 特定库 错了,Expo 不仅仅用于应用测试。此答案不适用于拥有 Expo 依赖库的用户。【参考方案3】:

在位于以下位置的build.gradle 文件中进行以下更改:

./android/app/build.gradle

从 abi 过滤器中移除 x86。

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

为不同的架构生成不同的 APK

def enableSeparateBuildPerCPUArchitecture = true

启用 ProGuard:

def enableProguardInReleaseBuilds = true

同时设置 minifyEnabled 为 true 和 shrinkResources 为 true

buildTypes 
        release 
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        
    

此外,您可以有不同的构建类型用于开发和发布构建(取决于您的用户群)

buildTypes 
        debug 
            ndk 
                abiFilters "armeabi-v7a", "x86"
            
            ....
        

        release 
            ndk 
                abiFilters "armeabi-v7a", "arm64-v8a"
            
            ....
        

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

【讨论】:

我们必须定义不同的版本代码(例如 def versionCodes = ["armeabi-v7a":18, "x86":19, "arm64-v8a": 20])。由于这个错误,我多次上传多个 apk 失败。 我们为什么要删除x86 form abi 过滤器?不需要吗? @VinilPrabhu 你收到回复了吗? @Yossi 我没有找到任何答案,我将 api 过滤器保留为"armeabi-v7a", "x86" @Yossi 如果您不想支持英特尔架构或仿真器,则可以将其删除。【参考方案4】:

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

在 app.json 中进行如下修改:

"expo": 
...
  "android": 
    "enableDangerousExperimentalLeanBuilds": true
  

根据您的项目,仅此一项即可将应用程序大小减少约 40-50%。

关于使用此选项,您应该了解一些事项,因此您应该阅读 https://github.com/expo/fyi/blob/master/managed-app-size.md。它仍然比弹出更容易。

最重要的是,您仍应使用 app bundle (.aab) 在上传到 Play 商店后再减少约 50% 的大小:

expo build:android -t app-bundle

【讨论】:

我有你这个“enableDangerousExperimentalLeanBuilds”:真的,我的应用是 80mb,现在是 59mb @SyedSadaifRizvi 您使用的是什么版本的 expo SDK?我尝试在 SDK40 中将 enableDangerousExperimentalLeanBuilds 设置为 true,但构建失败 这实际上破坏了我的应用程序。添加后它仅适用于世博会,但添加到游戏商店后会崩溃。 @AdarshKhatri 我想这就是他们在属性名称中添加“危险”的原因,可能有点不可预测。我也相信它现在已被弃用,取而代之的是 EAS 构建,根据文档可以大幅减小尺寸(还没有尝试过)【参考方案5】:

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

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

这里有一些你可能不需要的与托管流一起提供的节点模块

expo-ads-admob:8.3.0 博览会分析幅度:8.3.1 世博广告脸书:8.4.0 世博分析段:9.0.0 unimodules-constants-interface:5.3.0 博览会应用身份验证:9.2.0 博览会苹果身份验证:2.2.1 unimodules-app-loader:1.3.0 unimodules-字体界面:5.3.0 unimodules-image-loader-interface:5.3.0 unimodules-permissions-interface:5.3.0 世博应用:2.3.0 世博会:8.6.0 世博背景获取: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 世博会文档选择器:8.4.0 博览会错误恢复:1.3.0 博览会人脸检测器:8.3.0 世博会脸书:9.0.0 博览会文件系统:9.2.0 世博火力分析:2.5.0 世博火力基地核心:1.2.0 世博字体:8.3.0 世博会:9.1.1 世博会-gl-cpp:9.1.2 世博会-gl-cpp-legacy:8.4.0 世博会谷歌登录:8.3.0 博览会触觉:8.3.0 博览会图像加载器:1.2.0 博览会图像操纵器:8.3.0 世博会图像选择器:9.1.1 博览会权限:9.3.0 expo-in-app-purchases:9.0.0 博览会意图启动器:8.3.0 博览会保持清醒:8.3.0 展览线性梯度:8.3.0 博览会本地身份验证:9.3.0 世博本地化:9.0.0 展览地点:9.0.0 博览会邮件撰写者:8.4.0 展览媒体库:9.2.1 博览会模块模板:8.4.0 世博网络:2.3.0 博览会通知:0.7.2 展览支付条纹: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 博览会-sqlite:8.4.0 博览会商店评论:2.2.0 博览会更新:0.3.3 世博视频缩略图:4.3.0 世博网络浏览器:8.5.0

【讨论】:

有人测试过吗? 是的,我已经测试过了,在我的情况下它减少了 15mb。当我运行 expo:build android【参考方案6】:

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

0.57≈12mb

0.59.3≈30mb

对于0.59.9,它是≈15mb

总是尝试使用更新的 react-native 版本

【讨论】:

【参考方案7】:

我的建议是让您升级到 EAS,使用 EAS,您的构建大小减少了 3/4 以上,但是,此时您必须支付 29 美元,但我向您保证这是值得的。我一直致力于提示进入 EAS 的应用程序将包大小从 80MB 减少到 16MB?。 EAS 也有 EAS submit 让您可以在 Flash 中将您的应用提交到商店

【讨论】:

【参考方案8】:

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

    退出世博会 创建新的 react-native cli 项目并将所有源代码从 expo 复制到新的 react-native 项目。

【讨论】:

【参考方案9】:

将 expo 版本升级到 31.exporecently 为 Android 推出了单 SDK 版本。这些构建仅包含应用程序在构建时使用的 SDK 版本,并且更快、更苗条。它有助于较小的独立应用程序构建大小。 release note

【讨论】:

【参考方案10】:

在这里投票,以便 expo 可以查看功能https://expo.canny.io/feature-requests/p/reducing-app-size 问题是 react-native 使用 hermes,因此包装类似于 android studio 的原生 android 应用程序可以做的,但由于 herme 是最新的大约 1-2 年的 expo团队还没有支持爱马仕请投票。我也完全同意@jakobinn

【讨论】:

以上是关于如何在 Android 上减小 expo/react-native 应用程序的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在不损失 Android 分辨率的情况下减小位图的大小?

如何在 android studio 中减小 Apk (.apk) 的大小

如何减小 libskiasharp.so 的大小?

如何在android中以编程方式上传到服务器之前减小视频的大小[关闭]

如何在 Android 中减小 APK 大小?

如何在 Android 中减小 APK 大小?