Как изменить имя пакета приложения 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 , вы также можете настроить типы сборки .

Как выбрать между подходами:

  • Если вам нужны разные имена пакетов, чтобы иметь как отладочные, так и выпущенные apks, установленные на устройстве, используйте подход типа построения ниже, как согласны документы плагина Gradle . В этом случае ароматы являются излишним. (Я думаю, что все проекты должны по умолчанию делать это, так как это облегчит жизнь, особенно после того, как вы опубликуете в магазине и разрабатываете новые функции.)
  • Существуют действительные применения для ароматов продуктов , типичным примером которых является приложение со свободными и платными версиями. В этом случае проверьте ответ Ethan и прочитайте также документацию: Настройка Gradle Builds и Gradle Plugin. Руководство пользователя .

(Я полагаю, вы также можете объединить два подхода, которые приведут к тому, что каждый вариант сборки имеет четкое имя пакета, но я не тестировал это.)

Конфигурация типа сборки

Для типа сборки отладки и всех других типов, не относящихся к выпуску , укажите 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», как указано выше.

Ресурсы:

  • Этот пример прямо из презентации Xavier Ducrohet « Google I / O 2013: новый Android SDK Build System ».
  • Типы сборки в Руководстве пользователя .

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

Обновление (2016) : С тех пор я использовал этот подход во всех своих проектах, и я думаю, что это определенно путь. Я также включил его в руководство по лучшей практике Android от Futurice.

С версией плагина gradle 1.0.0+ вы должны использовать applicationId, как указано в руководстве по миграции

Переименованные свойства в ProductFlavors

PackageName => applicationId

Таким образом, в вашем build.gradle вы теперь будете использовать:

 productFlavors { flavor1 { applicationId "com.example.flavor1" } flavor2 { applicationId "com.example.flavor2" } } 

Из ответа Этана, как 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 } } } 
Intereting Posts