Можно ли изменить имя пакета приложения для Android с помощью Gradle?
Мне нужно скомпилировать две копии одного и того же приложения, имея уникальное имя пакета (чтобы я мог публиковать на рынке два раза).
Можно ли изменить имя пакета приложения для Android с помощью Gradle?
Мне нужно скомпилировать две копии одного и того же приложения, имея уникальное имя пакета (чтобы я мог публиковать на рынке два раза).
Вы могли бы что-то вроде этого
android {
...
defaultConfig {
minSdkVersion 8
versionCode 10
}
flavorDimensions "flavor1", "flavor2"
productFlavors {
flavor1 {
applicationId "com.example.flavor1"
versionCode 20
}
flavor2 {
applicationId "com.example.flavor2"
minSdkVersion 14
}
}
}
Вы также можете изменить поле android.defaultConfig.applicationId
, если хотите сделать одноразовые сборки.
Взято из: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration
В качестве более простой альтернативы использованию ароматов продукта как в ответе Ethan, вы также можете настроить типы сборки.
Как выбрать между подходами:
(Я полагаю, вы также можете объединить два подхода, которые приведут к тому, что каждый вариант сборки имеет отличное имя пакета, но я не тестировал это.)
Для типа сборки отладки и всех других типов, не относящихся к выпуску, определите applicationIdSuffix
, который будет добавлен к имени пакета по умолчанию.
(До Android Gradle версия плагина 0.11 эта настройка была известна как packageNameSuffix
.)
android {
buildTypes {
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
beta {
applicationIdSuffix '.beta'
versionNameSuffix '-BETA'
// NB: If you want to use the default debug key for a (non-debug)
// build type, you need to specify it:
signingConfig signingConfigs.debug
}
release {
// signingConfig signingConfigs.release
// runProguard true
// ...
}
}
}
Выше, debug
и release
являются типами построения по умолчанию, некоторые из которых настроены, а beta
- это полностью настраиваемый тип сборки. Чтобы создать разные типы, используйте assembleDebug
, assembleBeta
и т.д., Как обычно.
Аналогично, вы можете использовать versionNameSuffix
для переопределения имени версии по умолчанию из AndroidManifest (который я считаю очень полезным!). Например. "0,8" → "0.8-BETA", как указано выше.
Ресурсы
Я уже использовал productFlavors
для этой цели, но похоже, что настройка типа сборки может быть ближе к моим потребностям, плюс она упрощает конфигурацию сборки.
Обновление (2016). С тех пор я использовал этот подход во всех своих проектах, и я думаю, что это определенно путь. Я также включил его в руководство по Android Best Practices от Futurice.
При версии плагина gradle 1.0.0+ вы должны использовать applicationId, как указано в руководстве по миграции
Переименованные свойства в ProductFlavors
packageName = > applicationId
Таким образом, в вашем build.gradle вы теперь будете использовать:
productFlavors {
flavor1 {
applicationId "com.example.flavor1"
}
flavor2 {
applicationId "com.example.flavor2"
}
}
От ответа Ethan, как flavorGroups, так и packageName оба больше не доступны. Ниже работает с марта 2015 года.
android {
...
defaultConfig {
minSdkVersion 8
versionCode 10
}
flavorDimensions "flavor"
productFlavors {
flavor1 {
flavorDimension "flavor"
applicationId "com.example.flavor1"
versionCode 20
}
flavor2 {
flavorDimension "flavor"
applicationId "com.example.flavor2"
minSdkVersion 14
}
}
}