Как я могу иметь другое имя пакета для отладки и выпуска в модуле библиотеки? - PullRequest
0 голосов
/ 04 октября 2018

Короткий вопрос :

Как изменить имя пакета для debug или release тип сборки в модуле библиотеки?

Контекст :

В проекте Android с архитектурой MVP + Clean у нас есть шаблон хранилища в модуле библиотеки.Мы хотим включить Firebase в эту библиотеку с двумя средами (разработка и производство).

Я уже создал проект в Firebase (com.example.com и com.example.com.dev), а затем загрузил соответствующие google-services.json в папки src / main и src / debug.

Gradle Плагин google-services проверяет имя пакета модуля по идентификатору клиента, определенному в google-services.json , но Android ограничивает изменение applicationId в библиотеке (я не могу найтитехническая причина)

Вещи, которые я пробовал :

  • Есть два AndroidManifest.xml с другим свойством пакета.com.example.com в src / main и com.example.com.dev в src / debug /, но второй просто игнорируется
  • Установить manifest.srcFile в исходных наборах Gradle.Файл находится в списке, когда я запускаю ./gradlew sourceSets, но имя пакета не меняется
  • Два разных варианта в модуле библиотеки и устанавливают разные манифесты для каждого.Пакет в любом случае не меняется.

На данный момент у меня есть только два подходящих решения: 1. Сохраните настройку и реализацию Firebase в модуле приложения вне хранилища.2. Имейте только одну среду для Firebase.

Большое спасибо за любую помощь или совет.

EDIT :

Учтите, что мне нужно изменить пакет в модуле (библиотеке), а не в приложении.По какой-то странной причине Gradle показывает эту ошибку, когда я пытаюсь использовать applicationIdSuffix или applicationId в модуле:

ОШИБКА: Проекты библиотеки не могут установить applicationIdSuffix.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Я провел некоторое время, исследуя и пробуя разные альтернативы, чтобы получить два разных имени пакета для разновидности или типа сборки в модуле библиотеки, и мой короткий ответ: Вы не можете , по крайней мере, не делая что-то,хитрый и грязный.

Некоторым парням, которые рекомендуют использовать параметр applicationIdSuffix или applicationId, эта опция не работает, поскольку дизайн библиотечных модулей ограничивает эти параметры модулем приложения.В библиотеке пакет должен быть определен в манифесте .

Это ограничение разграничивает параметры для вариантов, но атрибут пакета в манифесте не объединяется, и вы получаете сообщение об ошибке при различном имени пакета для scr/main/AndroidManifest.xml и src/flavor/AndroidManifest.xml.

Самое сложное решение - получить текущий выбранный вариант из имени задачи, а затем изменить основной манифест в исходных наборах.

sourceSets {
    main {
        manifest.srcFile "src/$flavor_name/AndroidManifest.xml"
    }
}

Этот хак работает, но в целом это плохая идея, и я предпочитаю изменить дизайн моей архитектуры и по-разному реализовать хранилище для обоих вариантов Firebase.

Gradleплагин: 3.2.0

0 голосов
/ 04 октября 2018

Проекты библиотеки не могут устанавливать applicationId.

Это разработанное поведение проекта библиотеки Android.

Два разных варианта в модуле библиотеки и набор различных манифестов для каждого.Пакет в любом случае не меняется.

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

Смотрите скриншот ниже.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...