android - 使用 Gradle 组装时如何更改 Android 应用程序包名称?

标签 android gradle android-build android-gradle-plugin

是否可以使用 Gradle 更改 Android 应用程序的包名称?

我需要编译同一个应用程序的两个副本,具有唯一的包名称(这样我可以两次发布到市场)。

最佳答案

作为使用产品 flavor 的更简单的替代方法 as in Ethan's answer ,您还可以自定义构建类型

如何选择方法:

  • 如果您需要不同的软件包名称才能在设备上同时安装 debugrelease apk,请使用 构建类型接近下方,如 Gradle plugin docs agree .在这种情况下,口味是多余的。 (我认为默认情况下所有项目都应该这样做,因为它会让生活更轻松,尤其是在您发布到商店并开发新功能之后。)
  • 产品风格有很多用途,典型的例子是具有免费和付费版本的应用。在这种情况下,请检查 Ethan's answer并阅读文档:Configuring Gradle BuildsGradle Plugin User Guide .

(您也可以将这两种方法结合起来,这会导致每个构建变体都有不同的包名称。)

构建类型配置

对于 debug 构建类型和所有其他非release 类型,定义将添加到默认包名称的 applicationIdSuffix。 (在 Android Gradle plugin version 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
            // ...
        }

    }
}

上面,debugrelease 是默认构建类型,其某些方面是配置的,而 beta 是完全自定义的构建类型。要构建不同的类型,请照常使用 assembleDebugassembleBeta 等。

同样,您可以使用 versionNameSuffix 覆盖 AndroidManifest 中的默认版本名称(我觉得这非常有用!)。例如。 “0.8”→“0.8-BETA”,如上配置。

资源:

我自己到目前为止,我一直在使用 productFlavors 来实现这个确切的目的,但似乎构建类型自定义可能更接近我的需求,而且它使构建配置更简单。

更新(2016 年):我在所有项目中都使用了这种方法,我认为这绝对是要走的路。我也将它包含在 Android Best Practices 中由 Futurice 指导。

关于android - 使用 Gradle 组装时如何更改 Android 应用程序包名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18491649/

相关文章:

Android getWritableDatabase() 抛出 NullPointerException

Android 几秒钟后更改 Activity

java - Gradle:Jar Task不包括扩展名未知的文件

java - gradle:如何测试不同版本的依赖项?

java - 如何修复 "Execution failed for task ' :app:mergeDebugResources"in android studio?

android - 使用没有 jni 文件夹的 ndk-build 构建 android 共享库

java - Android Studio 重写屏幕

android - 将资源字符串添加到字符序列

java - 替换 Checkstyle 已弃用的 Gradle LoggingManager.setLevel()

android - 无法将请求的类放入单个 dex 文件中。尝试提供 main-dex 列表。 # 方法 : 66029 > 65536