如何为React Native启用multidex?

30

我相信这是一个内置功能,但当我搜索和查看文档时却找不到任何信息。是否有启用multidex构建的标志?

另外: 有没有办法查看哪些库正在影响您的方法数量?达到64k限制让我很惊讶。


你想仅为React Native启用multidex吗? - syntagma
6个回答

84

对于RN 0.59+和使用Gradle 3.4.1的情况,这里的所有答案都没有完整的解决方案。我按照以下步骤操作,成功了:

  1. In android/app/build.gradle, update the dependency block:

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

    And also update the defaultConfig in the android block:

    defaultConfig {
        // ... your `applicationId`, etc.
        multiDexEnabled true
    }
    
  2. In MainApplication.java, replace
    import android.app.Application;
    

    at the top with
    import android.support.multidex.MultiDexApplication;
    
    OR if you're on RN 0.60+ or have manually upgraded to AndroidX then use this instead:
    import androidx.multidex.MultiDexApplication;
    
  3. Still in MainApplication.java, replace
    public class MainApplication extends Application implements ReactApplication {
    

    with
    public class MainApplication extends MultiDexApplication implements ReactApplication {
    

5
对于那些仍然遇到问题的人,请检查以下行是否正确。导入应该是 androidx.multidex.MultiDexApplication,而不是 android.support.multidex.MultiDexApplication。这是对我有效的导入语句。 - buddhiv
我尝试了所有的方法,但问题仍然存在。有人能帮忙吗? - Siddharth Choudhary
1
如下所建议,这些步骤仅在minSdkVersion为20或更低版本时才需要。如果可以的话,将此版本升级到21将解决该问题。参考:https://developer.android.com/studio/build/multidex - Randam
谢谢,RN 0.60+ 的提示帮了很多忙!! - Halt
implementation 'com.android.support:multidex:1.0.3' 在使用 RN 0.60+ / AndroidX 的情况下是否有效?在这种情况下,也许我们应该使用 implementation 'androidx.multidex:multidex:2.0.1'。https://developer.android.com/studio/build/multidex.html - felipeptcho
显示剩余2条评论

17

在其他地方找到了答案。这与为任何普通的Android项目启用它没有任何区别。

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

对于方法数量,这个网站就行了:http://inloop.github.io/apk-method-count/


这还不够。你需要实现Gradle依赖。 - IgorGanapolsky

5

android/app/build.gradle

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

如果您正在使用Multidex,应该将您的Application类扩展为MultiDexApplication而不是Application。
我的Application.java
import android.support.multidex.MultiDexApplication;

public class MyApplication extends MultiDexApplication{
     ...
}

那么我们如何将MultiDexApplication导入到MainApplication文件中呢? - Daniel Barde
1
@DanielBarde import android.support.multidex.MultiDexApplication; - Alex Lévy
3
android.support.multidex.MultiDexApplication 无法转换为 com.facebook.react.ReactApplication。 - Computer's Guy
1
@octohedron 试试这个:public class MainApplication extends MultiDexApplication implements ReactApplication { - Francesco

3

由于Application必须扩展ReactApplication,因此我采用了与此处建议相似的方法,该方法在Android Developer关于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);
}

0

然而,如果您的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


0

步骤:1

打开 /android/app/build.gradle 文件

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

步骤二:

在同一文件中找到dependencies

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

注意:要了解多 Dex 的最新版本,请查看 Multidex 最新版本

步骤 3:

打开 MainApplication.java 文件,位于...

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

添加 multidex 导入

// ... all your other imports here

import androidx.multidex.MultiDexApplication; <-- ADD THIS LINE

我们的类定义需要像下面这样扩展extends MultiDexApplication

之前(在我的情况下)

public class MainApplication extends Application implements ReactApplication {

之后

public class MainApplication extends MultiDexApplication implements ReactApplication {

Application 替换为 MultiDexApplication

步骤 4(可选)

清理项目

参考 如何在 Android 中启用 Multidex

希望这有所帮助 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接