Gradle: Android-наследует buildtype

У меня есть в gradle (Android Studio) 4 типа сборки

android {
  buildTypes {
     release { ... }
     debug { ... }
     kindle { ... }
     kindle_debug { ... }
  }
}

И я знаю, что моя папка src может иметь для каждой папки типа сборки одну. Таким образом, он заканчивается на

 src/
  -- debug
  -- kindle
  -- kindle_debug
  -- main // used for every project
  -- release

В настоящий момент kindle совпадает с release и kindle_debug совпадает с debug.

Как избежать дублирования папок src? Есть ли способ унаследовать от release и debug, или я должен сам установить src-папки в файле build.gradle?

Изменить: одно решение, похоже, работает, это установить символические ссылки, но я хочу использовать Mac OS и ОС Windows, а не каждый новый пользователь хочет установить символические ссылки сами.

Изменить 2: я использую теперь ароматы продукта, из-за этого у меня может быть debug/release и с этим google, amazon и samsung. Это лучшее решение для моей цели.

Ответы

Ответ 1

Вы можете наследовать от типов сборки, например:

buildTypes {
     release { ... }
     debug { ... }

     kindle {
         initWith buildTypes.release
         ...
     }
     kindle_debug {
         initWith buildTypes.debug
         ...
     }
  }

Ответ 2

Ответ может быть немного запоздалым, но у меня была аналогичная проблема, и мне удалось решить эту проблему, выполнив следующие действия:

android {
    sourceSets {
        kindle {
            java.srcDirs = ["src/release/java", "src/main/java"]
        }
        kindle_debug {
            java.srcDirs = ["src/debug/java", "src/main/java"]
        }
    }
}

Если вы добавите это в свой файл build.gradle, тип типа Kindle будет использовать только java файлы из основной версии и основной папки, а тип сборки kindle_debug будет использовать папку для отладки и выпуска.

Конечно, вы можете добавить папку kindle или папку kindle_debug:

java.srcDirs = ["src/kindle/java", "src/release/java", "src/main/java"]
java.srcDirs = ["src/kindle_debug/java", "src/debug/java", "src/main/java"]

но вы можете столкнуться с повторяющимися ошибками класса.

Ответ 3

Если я правильно понял, вы хотите, чтобы только несколько файлов отличались друг от друга между сборками debug и release? В этом случае должно работать следующее (Моя учетная запись была такой же, как у вас):

fooobar.com/info/354583/...

Для полноты я вставлю соответствующую часть выше ответа здесь:

  1. Подход к каталогу Ressource

Цель заключалась в том, чтобы изменить файл в папке xml каждого клиента на основе того, является ли это выпуском или сборкой отладки. Это может быть достигнуто с помощью соответствующей структуры папок. Исходя из первоначального вопроса, у нас есть 3 клиента, и каждый клиент имеет отладочную и выпускную сборку. Вышеупомянутые xml файлы отличаются для каждого клиента и типа сборки. Следовательно, следующая структура каталогов:

src/
  - customerA
    //Contains all relevant resource files specific to customer A
  - customerB
    //Contains all relevant resource files specific to customer B
  - customerC
    //Contains all relevant resource files specific to customer C

  - customerADebug
    //Contains debug server-settings file for customer A
  - customerBDebug
    //Contains debug server-settings file for customer B
  - customerCDebug
    //Contains debug server-settings file for customer C
  - customerARelease
    //Contains release server-settings file for customer A
  - customerBRelease
    //Contains release server-settings file for customer B
  - customerCRelease
    //Contains release server-settings file for customer C

Таким образом, основное содержание каждого аромата продукта было в папке с тем же названием, что и аромат (customerA, customerB и т.д. см. первую часть вышеприведенного фрагмента). Теперь этот один файл, который отличается от того, была ли это отладочной или релизной сборкой для каждого клиента, помещается в соответствующие папки, такие как customerADebug → содержит файл с настройками сервера для режима отладки и т.д.

И когда вы создаете customerA, например, правильный файл будет выбран, если вы будете строить отладочную или выпускную сборку.

Дайте мне знать, если я уточню это дальше.