【问题标题】:Program type already present: BuildConfig程序类型已经存在:BuildConfig
【发布时间】:2018-11-15 23:21:47
【问题描述】:

我正在尝试生成发布版本,但由于 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

【问题讨论】:

  • 您是否有与应用程序模块具有相同包名的库模块?你能用 build.gradle 文件更新你的问题吗?
  • 放置两个 Gradle 文件的内容
  • @sagar 是的,我有一个具有相同包名的库,我认为是什么产生了这个问题,解决方案是什么?
  • 这个答案有用吗?
  • 你可以看到这个回复stackoverflow.com/a/26531074/4097495在我的情况下用这个建议解决。我的应用和我的模块具有相同的包名

标签: android android-multidex


【解决方案1】:

您收到此错误是因为您有一个与应用程序模块具有相同包名的库模块。

解决方案是更改库模块的包名称。您可以按照SO 中接受的答案进行操作,该答案描述了如何在 android studio 中更改包名称。

【讨论】:

  • 如果这对您不起作用,请在重命名库后尝试在 android 项目上执行 ./gradle clean
【解决方案2】:

在我的情况下,当我尝试在新安装的 Android 工作室上运行旧项目时发生这种情况 运行Build->Clean Project解决的问题

注意:正如朋友在 cmets 上所说,这是 Flutter 项目的解决方案

【讨论】:

  • 在构建 Flutter 应用程序并转换为 androidx 时为我工作
  • 我在处理颤振项目时遇到了这个问题。我在打开 android 部分时清理了它。
  • 在颤振中,这就是解决方案
【解决方案3】:

我解决了在我的应用模块的build.gradle 中启用 multiDexEnabled 的这个错误:

defaultConfig { 
    ...
    ...
    ...

    multiDexEnabled true
}

【讨论】:

  • 启用还是禁用?
  • @red-devil 对不起,我的错。它正在启用,所以multiDexEnabled true(将修复错字)。
【解决方案4】:

错误:程序类型已存在:somemodule/BuildConfig

原因

在我的例子中,我有一个(隐藏的)循环依赖,Android Studio 没有找到:

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

  2. somemodule/build.gradle 有 `androidTestImplementation project(":testutils")

解决方案

  • 在我的情况下,第二个依赖项不是必需的,所以我删除了它

【讨论】:

    【解决方案5】:

    只需转到 android studio 中的 tools>Flutter>Flutter clean。 它会解决问题。 (如果你正在使用颤振)

    【讨论】:

      【解决方案6】:

      我在 android studio 中升级了 android x 后遇到了这个问题。为了解决这个问题,我去了 File->Open 并在我当前的颤振项目中打开了 android 文件夹。然后我可以按照@Seymour Mammadli 的建议进入 Build->Clean Project。

      希望这可以帮助遇到同样问题的人。

      【讨论】:

        【解决方案7】:

        我在构建 Flutter 应用程序时遇到了问题,我按照官方指南解决了这个问题: https://developer.android.com/studio/build/multidex

        您只需:

        0. (Android: 转到重构 > 迁移到 AndroidX
        (如果您在 Flutter 项目中,要迁移模块,您必须转到 Tools > Flutter > Open for Editing in Android Studio

        1.(Both)修改模块级build.gradle文件启用multidex,并将multidex库添加为依赖,如下图:

        android {
            defaultConfig {
                ...
                minSdkVersion 15 
                targetSdkVersion 28
                multiDexEnabled true
            }
            ...
        }
        
        dependencies {
          implementation 'com.android.support:multidex:1.0.3'
        }
        

        2。 (non-Flutter)如果你不覆盖 Application 类,编辑你的清单文件在 标签中设置 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) 如果你不覆盖 Application 类,编辑你的清单文件,在 标签中设置 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 or kotlin folder]/[your/package/appName]下创建自定义类
        kotlin 版本: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

        【讨论】:

          【解决方案8】:

          我遇到了同样的错误。这种类型的应用程序不像我们那样通用,除了。在我的应用程序开发中,我使用了下面提到的依赖项

            youtube_player_flutter: ^6.1.0+7
            webview_flutter: ^0.3.20+2
          

          因为youtube_player_flutter 在内部它使用webview_flutter 作为依赖项之一。我删除了依赖项webview_flutter,它起作用了。

          【讨论】:

            【解决方案9】:

            尝试在您的库模块中添加 packageBuildConfig(false):

            android{
              ...
              packageBuildConfig(false)
            }
            

            【讨论】:

            • 现在应该是buildFeatures { buildConfig = false },对吧?
            【解决方案10】:

            用安卓工作室打开

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

            使用 android studio 构建为我工作。而不是使用 gradlew 控制台

            【讨论】:

              【解决方案11】:

              转到 android 文件夹并触发以下命令

              ./gradlew clean

              【讨论】:

                【解决方案12】:

                就我而言(开发插件),执行这些步骤是有效的:

                • cd example/androidexample是项目路径)
                • ./gradlew app:clean
                • cd ..; flutter clean; flutter packages get

                【讨论】:

                  【解决方案13】:

                  如果您的buildDir 与一个项目中的两个或多个模块相同,也会出现此问题。

                  【讨论】:

                  • 不正确,他必须在gradle中开启muti dex
                  • 我遇到了这个确切的问题,我通过将 buildDir 更改为每个模块唯一来解决它。启用 multi dex 没有任何影响。我并不是说这会解决 OP 的问题。我只是添加了这个答案,以防将来遇到此线程的其他人有所帮助。
                  【解决方案14】:

                  更改你的包名,例如:

                  您当前的包名:

                  com.example.appname

                  到:

                  com.example.appname.app

                  【讨论】:

                    【解决方案15】:

                    我在现有项目中添加 Flutter 时遇到错误,该消息表明 AndroidX 导致了该问题。

                    当我在 flutter_module/pubspec.yaml 的 bootom 修改 AndroidX 时

                    AndroidX:false
                    

                    再试一次,就成功了;

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2018-09-23
                      • 2019-02-22
                      • 1970-01-01
                      • 2018-10-21
                      • 1970-01-01
                      • 2018-10-03
                      • 2019-04-10
                      相关资源
                      最近更新 更多