#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.xmlgradle.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 проекта. источник
Комментариев нет:
Отправить комментарий