[英]How to change the package name of an Android flavor app with Gradle?
[英]How to change the Android app package name when assembling with Gradle?
是否可以使用 Gradle 更改 Android 應用程序的包名稱?
我需要編譯同一個應用程序的兩個副本,有一個唯一的包名(所以我可以向市場發布兩次)。
作為在 Ethan's answer 中使用產品風味的更簡單替代方法,您還可以自定義構建類型。
如何在這些方法之間進行選擇:
(您也可以將這兩種方法結合起來,這會導致每個構建變體都具有不同的包名稱。)
對於調試構建類型和所有其他非發布類型,定義將添加到默認包名稱的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 年) :從那以后,我在所有項目中都使用了這種方法,我認為這絕對是要走的路。 我也將它包含在 Futurice 的Android 最佳實踐指南中。
你可以這樣
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
使用 1.0.0+ 的 gradle 插件版本,您必須使用遷移指南中所述的applicationId
ProductFlavors 中的重命名屬性
包名 => 應用程序 ID
因此,在您的 build.gradle 中,您現在將使用:
productFlavors {
flavor1 {
applicationId "com.example.flavor1"
}
flavor2 {
applicationId "com.example.flavor2"
}
}
從 Ethan 的回答來看,flavorGroups 和 packageName 都不再可用。 以下作品截至 2015 年 3 月。
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
}
}
}
我不想使用 Flavors,所以我找到了一種使用 buildTypes 的方法。 我通過如下更改我的app/build.gradle
文件來做到這一點:
defaultConfig {
applicationId "com" // See buildTypes.type.applicationIdSuffix
...
}
...
buildTypes {
debug {
applicationIdSuffix ".domain.name.debug"
...
}
releaseStaging {
applicationIdSuffix ".compagny.staging"
...
}
release {
applicationIdSuffix ".domain.name"
...
}
}
這允許我在我的設備上有 3 個彼此相鄰的應用程序。
我希望這對其他人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.