与Gradle组装时如何更改Android应用程序包名称?
是否有可能使用Gradle更改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 } } }
如果你想做一次性构build,你也可以改变字段android.defaultConfig.applicationId
。
取自: http : //tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration
作为在Ethan的答案中使用产品风味的一个更简单的替代方法,您也可以自定义构buildtypes 。
如何在两种方法之间进行select:
- 如果你需要不同的软件包名称,可以同时在设备上安装debug和release apks,那么使用下面的build type方法,就像Gradle插件文档一样 。 在这种情况下味道是一个矫枉过正。 (我认为所有的项目都应该默认这样做,因为这会让你的生活更轻松,尤其是在你发布到商店并开发新function之后)。
- 产品口味是有效的用途,典型的例子是免费和付费版本的应用程序。 在这种情况下,检查Ethan的答案,并阅读文档: configurationGradle构build和Gradle插件用户指南 。
(我想你也可以结合这两种方法,这将导致每个构build变体具有不同的包名称,但是我没有testing过这个)。
构buildtypesconfiguration
对于debugging版本types以及所有其他非版本types,请定义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
是默认的构buildtypes,其中一些方面被configuration,而beta
是一个完全自定义的构buildtypes。 要像往常一样构build不同的types,请使用assembleDebug
, assembleBeta
等。
同样,你可以使用versionNameSuffix
来覆盖AndroidManifest的默认版本名称(我发现它非常有用!)。 例如上面configuration的“0.8”→“0.8-BETA”。
资源:
- 这个例子直接来自Xavier Ducrohet的“ Google I / O 2013:新的Android SDK构build系统 ”演示文稿。
- 在用户指南中创buildtypes 。
我自己我一直在使用productFlavors
到目前为止的确切目的,但似乎构buildtypes自定义可能更接近我的需要,再加上它使构buildconfiguration更简单。
更新(2016年) :我已经在我的所有项目中使用了这种方法,我认为这肯定是要走的路。 我也将它包含在Futurice的Android Best Practices指南中。
使用1.0.0+的gradle插件版本,您必须按照迁移指南中的说明使用applicationId
在ProductFlavors中重命名了属性
packageName => applicationId
因此,在你的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 } } }