为什么Flutter项目的.dex
文件中的 <64> 方法引用超过了?
我想知道是什么原因造成的:
在较小的 Flutter项目中,我使用了13个 plugins 。如果没有Multidex,则Android构建会失败,因为它大大超出了方法引用限制。
是否有任何技巧(例如与Gradle相关)可以减少方法引用计数,因为我认为这样的项目不应超过限制?
(如果您想进一步了解为什么我认为这很奇怪,请查看此问题的较早版本)
答案 0 :(得分:7)
如果您使用的minSdkVersion
小于21,则可以执行以下操作来启用multidex。
在您的应用程序级别build.gradle中进行如下更改:
multiDexEnabled true
添加到defaultConfig
defaultConfig {
minSdkVersion 15
targetSdkVersion 28
...
multiDexEnabled true
}
dependencies {
...
implementation 'androidx.multidex:multidex:2.0.1'
}
您可以参考this以获得更多信息。
答案 1 :(得分:3)
Use ProGuard以在编译时消除未使用的类。这样可以大大减少方法数量。
您需要调整ProGuard规则以像Flutter documentation explains here这样与Flutter一起使用。
答案 2 :(得分:1)
android/app/build
文件中在 defautConfig 下将minsdjversion
从16增加到21。
有些人甚至将其增加到28,但对我来说21岁就起作用了。
这是指向issue on git
编辑:multiDexEnabled: true
也可以在相同的 defautConfig 下使用。
答案 3 :(得分:1)
还有另一种解决方案,没有multidex或增加了最小SDK。但这需要R8,只需在应用程序级别build.gradle启用minify
buildTypes {
release {
minifyEnabled true
}
debug {
minifyEnabled true
}
}
来自github comment 或运行调试而不缩小github comment
buildTypes {
release {
minifyEnabled true
}
debug {
defaultConfig.minSdkVersion 21
}
}
答案 4 :(得分:1)
在build.gradle的defaultConfig下添加multiDexEnabled true
minSdkVersion 16
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
答案 5 :(得分:0)
我已使用下面的链接和第二步成功地将应用迁移到了 androidx :
1)Flutter Projects & Android X Migration Issues
2)在您的android / app / build文件中,将defaults下的minsdkversion从16增加到21。有些人甚至将其增加到28个,但它对我来说是21点。
答案 6 :(得分:0)
我遇到了同样的问题,对我来说,解决方法是像这样在minSdkVersion
中增加app/build.bradle
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
minSdkVersion 21 // change this to 21
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}