Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Manifest placeholders для различных build variants

#android #gradle


Есть два продакт флэйвора:

productFlavors {
    demo {
        ...
    }

    full {
        ...
    }
}


и два билд тайпа:

buildTypes {
    release {
        ...
    }

    debug {
        ...
    }
}


Исходя из существующих продакт флейворов и билд тайпов получается четыре билд варианта:

demoRelease
demoDebug
fullRelease
fullDebug


Возможно ли для каждого из четырех билд вариантов в AndroidManifest.xml прописать
различные значения для некоторых атрибутов? Если возможно, то как? С помощью manifest
placeholders или как-то иначе?

Например, есть четыре API-ключа для какого-то сервиса и в зависимости от конкретного
билд варианта в AndroidManifest.xml нужно вставлять свой собственный ключ.



Сейчас у меня это реализовано с помощью отдельного strings.xml для каждого билд варианта,
но хотелось бы где-то в одном файле прописать API-ключи, а не создавать кучу дополнительных
файлов.

Интересует что-нибудь вроде этого решения (в первой части ответа).
    


Ответы

Ответ 1



У меня сделано это так (build.gradle): android { defaultConfig { applicationId "blah-blah" targetSdkVersion targetSdkVersionVar } productFlavors { honeycumb { minSdkVersion minSdkHoneycumb targetSdkVersion targetSdkHoneycumb } kitkat { minSdkVersion minSdkKitkat targetSdkVersion targetSdkVersionVar } } } Остальное прописано в манифестах src/main, src/honeycumb, src/kitkat

Ответ 2



Можно дополнить вариант, предложенный вами таким образом: build.gradle android { defaultConfig { manifestPlaceholders = [ apiKey:project.property('default.ApiKey') ] } } applicationVariants.all{ variant-> if (variant.productFlavors.get(0).name.equals("demo")) { if (variant.buildType.name.equals("release")) { manifestPlaceholders = [ apiKey:project.property('release.demo.ApiKey') ] } else { manifestPlaceholders = [ apiKey:project.property('debug.demo.ApiKey') ] } } else if (variant.productFlavors.get(0).name.equals("full")){ if (variant.buildType.name.equals("release")) { manifestPlaceholders = [ apiKey:project.property('release.full.ApiKey') ] } else { manifestPlaceholders = [ apiKey:project.property('debug.full.ApiKey') ] } } } AndroidManifest.xml gradle.properties (глобальный) Если его нет, то необходимо создать и расположить по пути /.gradle. release.demo.ApiKey="your_key" debug.demo.ApiKey="your_key" release.full.ApiKey="your_key" debug.full.ApiKey="your_key" default.ApiKey="your_key" Глобальный файл нужен только если код будет загружен в публичный репозиторий, так как он игнорируется системами контроля версий (актуально для библиотек). В противном случае можно использовать gradle.properties проекта. источник

Комментариев нет:

Отправить комментарий