【问题标题】:How do I enable multidex for react native?如何启用 multidex 以响应本机?
【发布时间】:2017-05-23 16:37:20
【问题描述】:

我很确定它是一个内置功能,但在搜索或在文档中找不到任何东西。是否有启用 multidex 的构建标志?

另外说明: 有什么方法可以查看哪些库正在弄乱您的方法计数?达到 64k 的限制令人惊讶。

【问题讨论】:

  • 您只想为 React Native 启用 multidex?

标签: java android react-native


【解决方案1】:

对于 RN 0.59+ 并使用 Gradle 3.4.1,这里的答案都没有完整的解决方案。我做了以下事情并且成功了:

  1. android/app/build.gradle 中,更新dependency 块:

    dependencies {
        // ... your other dependencies
    
        // Multidex
        implementation 'com.android.support:multidex:1.0.3'
    }
    

    同时更新android块中的defaultConfig

    defaultConfig {
        // ... your `applicationId`, etc.
        multiDexEnabled true
    }
    
  2. MainApplication.java,替换
    import android.app.Application;
    
    在顶部
    import android.support.multidex.MultiDexApplication;
    
    ,如果您使用的是 RN 0.60+ 或已手动升级到 AndroidX,请改用以下代码:
    import androidx.multidex.MultiDexApplication;
    
  3. 还在MainApplication.java,替换
    public class MainApplication extends Application implements ReactApplication {
    
    public class MainApplication extends MultiDexApplication implements ReactApplication {
    

【讨论】:

  • 对于此答案仍有问题的人,请检查以下行是否正确。导入应该是androidx.multidex.MultiDexApplication。不是android.support.multidex.MultiDexApplication。这是对我有用的导入语句。
  • 天才!谢谢:-)
  • 添加了关于 RN 0.60+ / AndroidX 的注释和替代说明。谢谢@buddhiv!
  • 如下所示,这些步骤仅在 minSdkVersion 为 20 或更少时才需要。如果可以,将此版本升级到 21 将解决此问题。参考:developer.android.com/studio/build/multidex
  • @buddhiv 非常感谢,你救了我
【解决方案2】:

在别处找到答案。这与为任何常规 Android 项目启用它没有什么不同。

android {
    ....
    defaultConfig {
        ...
        multiDexEnabled true
    }

关于方法计数,这个网站可以解决问题:http://inloop.github.io/apk-method-count/

【讨论】:

  • 这还不够。你需要实现 gradle 依赖
【解决方案3】:

android/app/build.gradle

android {
    ....
    defaultConfig {
        ...
        multiDexEnabled true
    }

如果您使用 Multidex,您的应用程序应该扩展 MultiDexApplication 而不是应用程序。

MyApplication.java

import android.support.multidex.MultiDexApplication;

public class MyApplication extends MultiDexApplication{
     ...
}

【讨论】:

  • 那么我们如何将MultiDexApplication导入MainApplication文件呢?
  • @DanielBarde import android.support.multidex.MultiDexApplication;
  • android.support.multidex.MultiDexApplication 无法转换为 com.facebook.react.ReactApplication
  • @octohedron try public class MainApplication extends MultiDexApplication implements ReactApplication {
【解决方案4】:

由于Application 必须扩展ReactApplication,我使用了与the one suggested here 类似的方法,该方法在Android 开发人员reference on multidex 的第2 点中记录,以附加到基本上下文:

app/build.gradle

android {
    compileSdkVersion projectCompileSdkVersion // Or your version

    defaultConfig {
        minSdkVersion projectMinSdkVersion // Or your version
        targetSdkVersion projectTargetSdkVersion // Or your version
        multiDexEnabled true // *
    }
    dexOptions {
        jumboMode true // *
    }
}

dependencies {
  compile 'com.android.support:multidex:1.0.3' // https://mvnrepository.com/artifact/com.android.support/multidex
}

MainApplication.java

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

【讨论】:

    【解决方案5】:

    但是,如果您的 minSdkVersion 设置为 20 或更低,那么您必须使用 multidex 支持库,如下所示:

    android {
        defaultConfig {
            ...
            minSdkVersion 15 
            targetSdkVersion 26
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
      compile 'com.android.support:multidex:1.0.3'
    }
    

    https://developer.android.com/studio/build/multidex

    【讨论】:

      【解决方案6】:

      步骤:1

      打开/android/app/build.gradle

      android {
          ...
          defaultConfig {
              ...
              multiDexEnabled true <-- ADD THIS LINE
          }
      }
      

      步骤:2

      在同一个文件中找到dependencies

      dependencies {
          ...
          implementation 'androidx.multidex:multidex:2.0.1' <-- ADD THIS LINE
          ...
      }
      

      步骤:3

      打开MainApplication.java下的文件

      android/app/src/main/java/.../MainApplication.java
      

      添加多索引导入

      // ... all your other imports here
      
      import androidx.multidex.MultiDexApplication; <-- ADD THIS LINE
      

      我们的类定义需要extends MultiDexApplication,如下所示

      Beofre(就我而言)

      public class MainApplication extends Application implements ReactApplication {
      

      之后

      public class MainApplication extends MultiDexApplication implements ReactApplication {
      

      Application 替换为MultiDexApplication

      Spet:4(可选)

      清理项目

      参考How To Enable Multidex in Android

      希望这会有所帮助;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 2023-03-17
        • 1970-01-01
        • 2018-10-24
        相关资源
        最近更新 更多