Тип программы уже присутствует: 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

У вас есть модуль библиотеки с тем же именем пакета, что и у модуля приложения? Можете ли вы обновить свой вопрос с помощью файла build.gradle?

Sagar 06.06.2018 12:09

Поместите содержимое обоих файлов Gradle

Parth Patel 06.06.2018 12:48

@sagar да, у меня есть библиотека с тем же именем пакета, я думаю, что порождает эту проблему, какое решение для этого?

Oussaki 06.06.2018 12:53

был ли ответ полезен?

Sagar 07.06.2018 08:19

Вы можете увидеть этот ответ stackoverflow.com/a/26531074/4097495 в моем случае решить с помощью этого предложения. мое приложение и мой модуль имеют одинаковое имя пакета

Mahdi Azadbar 30.06.2018 08:35

у меня есть уникальные имена пакетов, но я все равно получаю эту ошибку

Jonathan 29.11.2018 18:10
63
6
51 652
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Ответ принят как подходящий

Вы получаете эту ошибку, потому что у вас есть модуль библиотеки с тем же именем пакета, что и модуль приложения.

Решением было бы изменить имя пакета вашего библиотечного модуля. Вы можете следовать принятому ответу в этом ТАК, который описывает, как изменить имя пакета в студии Android.

Если это не сработало, попробуйте выполнить ./gradle clean в проекте Android после того, как вы переименовали библиотеку.

Bajju 28.01.2019 10:06

Ошибка: тип программы уже присутствует: somemodule / BuildConfig

Причина

В моем случае у меня была (скрытая) круговая зависимость, которую Android Studio не нашла:

  1. testutils/build.gradle использует implementation project(':somemodule')

  2. somemodule/build.gradle имел проект androidTestImplementation (": testutils")

Решение

  • в моем случае вторая зависимость не нужна, поэтому я удалил ее

В моем случае это происходило, когда я пытался запустить старый проект в новой установленной студии Android. Проблема решена запуском Build->Clean Project

Примечание: Как говорят друзья в комментариях, это решение для флаттер-проекта

Работал у меня при создании приложения flutter и преобразовал его в androidx

user1603721 21.08.2019 18:06

У меня возникла эта проблема, когда я боролся с проектом флаттера. Чистил пока открывалась андроид часть.

Mahdi-Malv 16.09.2019 07:11

во флаттере это решение

mohammad 07.12.2019 23:05

У меня возникла эта проблема после обновления android x в студии android. Чтобы исправить это, я перешел в File-> Open и открыл папку android в моем текущем проекте flutter. Затем я смог перейти в Build-> Clean Project, как это было предложено @Seymour Mammadli.

Надеюсь, это поможет кому-то с той же проблемой.

Я решил эту ошибку, включив multiDexEnabled в build.gradle модуля моего приложения:

defaultConfig { 
    ...
    ...
    ...

    multiDexEnabled true
}

Включение или отключение?

red-devil 05.11.2019 13:42

@ red-devil извини, это моя вина. Это включение, поэтому multiDexEnabled true (исправит опечатку).

Erik Medina 06.11.2019 14:50

Я столкнулся с проблемой при создании приложения Флаттер, и я решил ее, следуя официальное руководство: https://developer.android.com/studio/build/multidex

Вам просто необходимо:

0. (Android: Перейдите в Refactor> Migrate to AndroidX
(Если вы работаете в проекте Флаттер, чтобы перенести модуль, вам нужно перейти в Инструменты> 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. (без флаттера) Если вы не переопределяете класс Application, отредактируйте файл манифеста, чтобы установить android: имя в теге <application> следующим образом:

<?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. (Флаттер) Если вы не переопределяете класс Application, отредактируйте файл манифеста, чтобы установить android: имя в теге <application> следующим образом:

<?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. (Флаттер) Создайте собственный класс в папке project / android / app / src / main / [java или kotlin folder] / [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

Просто перейдите к инструменты> Flutter> Flutter clean в студии Android. Это решит проблему. (Если вы работаете с флаттером)

В моем случае (разработка плагина) эти шаги сработали:

  • 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 одинаков для двух или более модулей в проекте.

это не правильно, он должен включить muti dex в градиенте

Alejandro Gonzalez 06.07.2020 17:00

У меня была именно эта проблема, и я решил ее, изменив buildDir на уникальный для каждого модуля. Включение multi dex никак не повлияло. Я не говорю, что это решит проблему OP. Я просто добавил этот ответ на случай, если он поможет другим людям, которые столкнутся с этой веткой в ​​будущем.

Gaztin 08.07.2020 00:58

попробуйте добавить packageBuildConfig (false) в свой библиотечный модуль:

android{
  ...
  packageBuildConfig(false)
}

Это должно быть сейчас, buildFeatures { buildConfig = false }, верно?

garrettmaring 23.02.2021 19:51

Измените имя вашего пакета, например:

Ваше текущее имя пакета:

com.example.appname

к:

com.example.appname.app

Я обнаружил ошибку при добавлении флаттера в существующий проект, сообщение указывает на то, что AndroidX вызывает проблему.

когда я изменяю AndroidX при загрузке flutter_module / pubspec.yaml

AndroidX:false

и попробуйте еще раз, это работает;

Другие вопросы по теме