【发布时间】:2017-05-23 16:37:20
【问题描述】:
我很确定它是一个内置功能,但在搜索或在文档中找不到任何东西。是否有启用 multidex 的构建标志?
另外说明: 有什么方法可以查看哪些库正在弄乱您的方法计数?达到 64k 的限制令人惊讶。
【问题讨论】:
-
您只想为 React Native 启用 multidex?
标签: java android react-native
我很确定它是一个内置功能,但在搜索或在文档中找不到任何东西。是否有启用 multidex 的构建标志?
另外说明: 有什么方法可以查看哪些库正在弄乱您的方法计数?达到 64k 的限制令人惊讶。
【问题讨论】:
标签: java android react-native
对于 RN 0.59+ 并使用 Gradle 3.4.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
}
MainApplication.java,替换
import android.app.Application;
在顶部
import android.support.multidex.MultiDexApplication;
或,如果您使用的是 RN 0.60+ 或已手动升级到 AndroidX,请改用以下代码:
import androidx.multidex.MultiDexApplication;
MainApplication.java,替换
public class MainApplication extends Application implements ReactApplication {
和
public class MainApplication extends MultiDexApplication implements ReactApplication {
【讨论】:
androidx.multidex.MultiDexApplication。不是android.support.multidex.MultiDexApplication。这是对我有用的导入语句。
在别处找到答案。这与为任何常规 Android 项目启用它没有什么不同。
android {
....
defaultConfig {
...
multiDexEnabled true
}
关于方法计数,这个网站可以解决问题:http://inloop.github.io/apk-method-count/
【讨论】:
android/app/build.gradle
android {
....
defaultConfig {
...
multiDexEnabled true
}
如果您使用 Multidex,您的应用程序应该扩展 MultiDexApplication 而不是应用程序。
MyApplication.java
import android.support.multidex.MultiDexApplication;
public class MyApplication extends MultiDexApplication{
...
}
【讨论】:
import android.support.multidex.MultiDexApplication;
由于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);
}
【讨论】:
但是,如果您的 minSdkVersion 设置为 20 或更低,那么您必须使用 multidex 支持库,如下所示:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
【讨论】:
步骤: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
希望这会有所帮助;)
【讨论】: