Android gradle - Настройка продуктов с использованием различных каталогов для файлов конфигурации, выглядит во всех каталогах, а не только 1 - PullRequest
0 голосов
/ 25 февраля 2019

Для существующего приложения, которое переходит на FireBase, я пытаюсь настроить сборку разработки и производственную сборку.Я использую два разных проекта в Firebase, и поэтому у меня есть два разных google.services.json.Я в основном следую этому примеру .

Разорванный файл Gradle, обратите внимание на buildTypes & productFlavors:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "nl.my_project.cwo_app"
        (...)
    }

    buildTypes {
        release {
        }
        debug {
            applicationIdSuffix ".debug"
        }
    }


    // This is used to ensure the right version of google-services.json is used.
    flavorDimensions "version"
    productFlavors {
        dev {
            dimension "version"
            versionNameSuffix "-dev"
        }
        prod {
            dimension "version"
            versionNameSuffix "-prod"
        }
    }
}

dependencies {
     ...
}

У меня следующая структура каталогов:

app/
    src/
        main/
        dev/
            google-services.json (for dev only)
        prod/
            google-services.json (for prod only)

Насколько я понимаю, следует убедиться, что после того, как я соберу что-нибудь со вкусом dev, он использует google-services.json в папке dev.Но когда я собираю проект (после выбора варианта сборки, например, devDebug), он выдает ошибку о том, что идентификатор приложения не подходит.Глядя на это показывает, что на самом деле ОБА google-services.json используются.Как я могу это изменить?

Журнал сборки:

14:00:55: Executing task 'build'...

Executing tasks: [build]


> Configure project :app

> Task :app:preBuild UP-TO-DATE
> Task :app:preDevDebugBuild UP-TO-DATE
> Task :app:compileDevDebugAidl NO-SOURCE
(...) 

> Task :app:processDevDebugGoogleServices
Parsing json file: E:\projecten\CWO_app\app\src\dev\google-services.json

(...)     
> Task :app:processProdDebugGoogleServices FAILED
Parsing json file: E:\projecten\CWO_app\app\src\prod\google-services.json

FAILURE: Build failed with an exception.
Execution failed for task ':app:processProdDebugGoogleServices'.
> No matching client found for package name 'nl.my_project.cwo_app.debug'

Как вы можете видеть, он создает версию с applicationIdSuffix ".debug", а затем пытается сопоставить ее с файлом впапка prod, которая не использует этот идентификатор приложения.Как я могу остановить просмотр двух папок?

1 Ответ

0 голосов
/ 14 мая 2019

Проблема связана с сочетанием названия аромата и релиза.В соответствии с предоставленным файлом Gradle, когда тип сборки «отладочный», добавляется суффикс .debug, следовательно, если у вашего google-services.json файла нет объявленного результирующего имени пакета, произойдет сбой.

Доступны следующие комбинации имен пакетов:

  • nl.my_project.cwo_app.debug (для типа отладочной сборки)
  • nl.my_project.cwo_app (для типа сборки выпуска)

Как это исправить

Проверьте в google-services.json доступные имена пакетов.Если какая-либо из комбинаций, описанных выше, там не объявлена, добавьте их из консоли Firebase и обновите новый файл json в своем проекте.

Совет: Вы можете иметь один единственный файл google-services.json со всем пакетомимена в нем вместо того, чтобы иметь один файл на комбинацию аромата и / или сборки.Как правило, это более аккуратно с точки зрения удобства обслуживания (один файл против типов сборки * количество разновидностей)

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