【问题标题】:how to reduce react native build apk size如何减少反应原生构建 apk 大小
【发布时间】:2020-04-20 06:50:08
【问题描述】:

我已经构建了一个 react native 项目,我添加了一些库,我构建了一个 apk 来检查它是否有效,我看到了这个。我现在没有活动,只有几个图书馆。

这就是我的 package.json 的样子:

{
  "name": "AppName",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "load-script": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-community/async-storage": "^1.9.0",
    "@react-native-community/masked-view": "^0.1.9",
    "@react-navigation/native": "^5.1.5",
    "@react-navigation/stack": "^5.2.10",
    "axios": "^0.19.2",
    "i18next": "^19.4.2",
    "moment-jalaali": "^0.9.2",
    "native-base": "^2.13.12",
    "react": "16.11.0",
    "react-i18next": "^11.3.4",
    "react-native": "0.62.2",
    "react-native-gesture-handler": "^1.6.1",
    "react-native-localize": "^1.4.0",
    "react-native-reanimated": "^1.8.0",
    "react-native-responsive-screen": "^1.4.1",
    "react-native-restart": "^0.0.14",
    "react-native-safe-area-context": "^0.7.3",
    "react-native-screens": "^2.4.0",
    "react-native-svg": "^12.1.0",
    "react-redux": "^7.2.0",
    "redux": "^4.0.5",
    "redux-logger": "^3.0.6",
    "redux-persist": "^6.0.0",
    "redux-thunk": "^2.3.0"
  },
  "devDependencies": {
    "@babel/core": "^7.9.0",
    "@babel/runtime": "^7.9.2",
    "@react-native-community/eslint-config": "^1.0.0",
    "babel-jest": "^25.3.0",
    "eslint": "^6.8.0",
    "jest": "^25.3.0",
    "metro-react-native-babel-preset": "^0.59.0",
    "react-test-renderer": "16.11.0",
    "reactotron-react-native": "^5.0.0"
  },
  "jest": {
    "preset": "react-native"
  }
}

我怎样才能减少 apk 的大小,有什么方法可以知道哪个库占用了太多的大小?

【问题讨论】:

标签: android react-native


【解决方案1】:
  release {
            debuggable false
            shrinkResources true
            minifyEnabled true
            useProguard true
            setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])
          }
  • 使用 minifyEnableduseProguard 行,您将 激活代码的缩小和混淆。
  • 添加到代码中的库可能包含未使用的资源。如果您在应用的 build.gradle 文件中启用 shrinkResources,Gradle 可以代表您自动删除资源。

/** * 运行 Proguard 以缩小发布版本中的 Java 字节码。 */ def enableProguardInReleaseBuilds = true

Proguard 是一个可以稍微减小 APK 大小的工具。它通过剥离您的应用未使用的部分 React Native Java 字节码(及其依赖项)来做到这一点。

  • 设置 def enableProguardInReleaseBuilds = true 这将启用 Progaurd 压缩 Java 字节码。这会减小应用的大小。
  • 设置默认enableSeparateBuildPerCPUArchitecture = true

【讨论】:

    【解决方案2】:

    android/app/build.gradle 中添加一行:

    def enableSeparateBuildPerCPUArchitecture = true
    

    【讨论】:

    • 你也可以使用 Hermes 引擎