是否可以使用 Gradle 更改 Android 应用程序的包名称?
我需要编译同一个应用程序的两个副本,具有唯一的包名称(这样我可以向市场发布两次)。
是否可以使用 Gradle 更改 Android 应用程序的包名称?
我需要编译同一个应用程序的两个副本,具有唯一的包名称(这样我可以向市场发布两次)。
作为在 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 年):我在所有项目中都使用了这种方法,我认为这绝对是要走的路。我还将它包含在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 个彼此相邻的应用程序。
我希望这对其他人有帮助。