程序类型已经存在: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 没有找到:

  1. testutils/build.gradle 使用 implementation project(':somemodule')

  2. 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/androidexample为项目路径)
  • ./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工作室

  1. 构建 > 清理项目
  2. 构建 > 构建包(包/apk)

使用 android studio 为我构建。而不是使用 gradlew console