程序类型已经存在:BuildConfig
Program type already present: BuildConfig
我正在尝试生成发布版本,但由于 mutidex 问题我无法生成我的项目启用了所有 multidex 并添加了依赖项
我收到的错误是:
Execution failed for task ':app:transformClassesWithMultidexlistForRelease
Caused by: com.android.build.api.transform.TransformException: Error while generating the main dex list.
还有:
Caused by: com.android.tools.r8.errors.CompilationError: Program type already present: com.myapp.BuildConfig
您收到此错误是因为您的库模块与应用程序模块具有相同的包名。
解决方案是更改库模块的包名称。您可以按照此 SO 中接受的答案进行操作,其中描述了如何在 android studio 中更改包名称。
错误:程序类型已存在:somemodule/BuildConfig
原因
在我的例子中,我有一个(隐藏的)循环依赖,Android Studio 没有找到:
testutils/build.gradle
使用 implementation project(':somemodule')
somemodule/build.gradle
有`androidTestImplementation 项目(":testutils")
解决方案
- 在我的例子中,第二个依赖项不是必需的,所以我删除了它
在我的情况下,当我尝试在新安装的 Android 工作室上 运行 旧项目时发生了这种情况
运行ning Build->Clean Project
解决的问题
注意:正如评论中的朋友所说,这是一个flutter项目的解决方案
我在 android studio 中进行 android x 升级后遇到了这个问题。为了解决这个问题,我转到 File->Open 并打开了我当前 flutter 项目中的 android 文件夹。然后我可以按照@Seymour Mammadli 的建议转到“构建”->“清理项目”。
希望这对遇到同样问题的人有所帮助。
我解决了在我的应用模块的 build.gradle
中启用 multiDexEnabled 的错误:
defaultConfig {
...
...
...
multiDexEnabled true
}
我在构建 Flutter 应用程序时遇到了问题,我按照 官方指南 解决了这个问题:
https://developer.android.com/studio/build/multidex
您只需:
0. (Android: 去重构 > 迁移到 AndroidX
(如果您在 Flutter 项目上,要迁移模块,您必须转到工具 > Flutter > 在 Android Studio
中打开以进行编辑
1. (两者)修改模块级build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
2。 (非 Flutter)如果您不覆盖应用程序 class,请编辑您的清单文件以设置 android:name在标签中如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
2。 (Flutter) 如果您不覆盖应用程序 class,请编辑您的清单文件以在 android:name 中设置 标签如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name=".App" >
...
</application>
</manifest>
3.(Flutter) 在project/android/app/src/main/[java或kotlin文件夹下创建自定义class]/[your/package/appName]
科特林版本:App.kt
package your.package.appName
import io.flutter.app.FlutterApplication
import android.content.Context
import androidx.multidex.MultiDex
class App : FlutterApplication() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}
java版本:App.java
package your.package.appName;
import io.flutter.app.FlutterApplication;
import android.content.Context;
import androidx.multidex.MultiDex;
public class App extends FlutterApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
4。 (两者)如果你做到了,庆祝一下!! :D
更多信息,请查看官方指南 ;)
https://developer.android.com/studio/build/multidex
只需在 android 工作室中转到 tools>Flutter>Flutter clean。
它会解决问题。 (如果你正在使用 flutter)
就我而言(开发插件),执行这些步骤有效:
cd example/android
(example
为项目路径)
./gradlew app:clean
cd ..; flutter clean; flutter packages get
转到 android 文件夹并执行以下命令
./gradlew clean
我遇到了同样的错误。这种类型的应用程序并不像我们所做的那样通用。在我的应用程序开发中,我使用了下面提到的依赖项
youtube_player_flutter: ^6.1.0+7
webview_flutter: ^0.3.20+2
因为 youtube_player_flutter
在内部它使用 webview_flutter
作为依赖项之一。我删除了依赖项 webview_flutter
并且它起作用了。
如果项目中两个或多个模块的 buildDir
相同,也会出现此问题。
尝试在您的库模块中添加 packageBuildConfig(false):
android{
...
packageBuildConfig(false)
}
更改您的包名称,例如:
您当前的包名:
com.example.appname
至:
com.example.appname.app
我在将 flutter 添加到现有项目时遇到错误,消息表明 AndroidX 导致了问题。
当我在 flutter_module/pubspec.yaml
的 bootom 修改 AndroidX 时
AndroidX:false
再试一次,成功了;
打开Android工作室
- 构建 > 清理项目
- 构建 > 构建包(包/apk)
使用 android studio 为我构建。而不是使用 gradlew console
我正在尝试生成发布版本,但由于 mutidex 问题我无法生成我的项目启用了所有 multidex 并添加了依赖项
我收到的错误是:
Execution failed for task ':app:transformClassesWithMultidexlistForRelease
Caused by: com.android.build.api.transform.TransformException: Error while generating the main dex list.
还有:
Caused by: com.android.tools.r8.errors.CompilationError: Program type already present: com.myapp.BuildConfig
您收到此错误是因为您的库模块与应用程序模块具有相同的包名。
解决方案是更改库模块的包名称。您可以按照此 SO 中接受的答案进行操作,其中描述了如何在 android studio 中更改包名称。
错误:程序类型已存在:somemodule/BuildConfig
原因
在我的例子中,我有一个(隐藏的)循环依赖,Android Studio 没有找到:
testutils/build.gradle
使用implementation project(':somemodule')
somemodule/build.gradle
有`androidTestImplementation 项目(":testutils")
解决方案
- 在我的例子中,第二个依赖项不是必需的,所以我删除了它
在我的情况下,当我尝试在新安装的 Android 工作室上 运行 旧项目时发生了这种情况
运行ning Build->Clean Project
注意:正如评论中的朋友所说,这是一个flutter项目的解决方案
我在 android studio 中进行 android x 升级后遇到了这个问题。为了解决这个问题,我转到 File->Open 并打开了我当前 flutter 项目中的 android 文件夹。然后我可以按照@Seymour Mammadli 的建议转到“构建”->“清理项目”。
希望这对遇到同样问题的人有所帮助。
我解决了在我的应用模块的 build.gradle
中启用 multiDexEnabled 的错误:
defaultConfig {
...
...
...
multiDexEnabled true
}
我在构建 Flutter 应用程序时遇到了问题,我按照 官方指南 解决了这个问题: https://developer.android.com/studio/build/multidex
您只需:
0. (Android: 去重构 > 迁移到 AndroidX
(如果您在 Flutter 项目上,要迁移模块,您必须转到工具 > Flutter > 在 Android Studio
中打开以进行编辑 1. (两者)修改模块级build.gradle文件以启用multidex并将multidex库添加为依赖项,如下所示:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
2。 (非 Flutter)如果您不覆盖应用程序 class,请编辑您的清单文件以设置 android:name在
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
2。 (Flutter) 如果您不覆盖应用程序 class,请编辑您的清单文件以在 android:name 中设置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name=".App" >
...
</application>
</manifest>
3.(Flutter) 在project/android/app/src/main/[java或kotlin文件夹下创建自定义class]/[your/package/appName]
科特林版本:App.kt
package your.package.appName
import io.flutter.app.FlutterApplication
import android.content.Context
import androidx.multidex.MultiDex
class App : FlutterApplication() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}
java版本:App.java
package your.package.appName;
import io.flutter.app.FlutterApplication;
import android.content.Context;
import androidx.multidex.MultiDex;
public class App extends FlutterApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
4。 (两者)如果你做到了,庆祝一下!! :D
更多信息,请查看官方指南 ;)
https://developer.android.com/studio/build/multidex
只需在 android 工作室中转到 tools>Flutter>Flutter clean。 它会解决问题。 (如果你正在使用 flutter)
就我而言(开发插件),执行这些步骤有效:
cd example/android
(example
为项目路径)./gradlew app:clean
cd ..; flutter clean; flutter packages get
转到 android 文件夹并执行以下命令
./gradlew clean
我遇到了同样的错误。这种类型的应用程序并不像我们所做的那样通用。在我的应用程序开发中,我使用了下面提到的依赖项
youtube_player_flutter: ^6.1.0+7
webview_flutter: ^0.3.20+2
因为 youtube_player_flutter
在内部它使用 webview_flutter
作为依赖项之一。我删除了依赖项 webview_flutter
并且它起作用了。
如果项目中两个或多个模块的 buildDir
相同,也会出现此问题。
尝试在您的库模块中添加 packageBuildConfig(false):
android{
...
packageBuildConfig(false)
}
更改您的包名称,例如:
您当前的包名:
com.example.appname
至:
com.example.appname.app
我在将 flutter 添加到现有项目时遇到错误,消息表明 AndroidX 导致了问题。
当我在 flutter_module/pubspec.yaml
的 bootom 修改 AndroidX 时AndroidX:false
再试一次,成功了;
打开Android工作室
- 构建 > 清理项目
- 构建 > 构建包(包/apk)
使用 android studio 为我构建。而不是使用 gradlew console