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

Ser*_*m's 47 android gradle android-build android-gradle-plugin

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

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

Jon*_*nik 65

作为在Ethan的答案中使用产品风味 的更简单的替代方法,您还可以自定义构建类型.

如何选择方法:

  • 如果您需要不同的软件包名称,以便能够在设备上安装调试发布 apks,那么请使用下面的构建类型方法,因为Gradle插件文档同意.在这种情况下,口味是一种矫枉过正.(我认为默认情况下所有项目都应该这样做,因为它会让您的生活更轻松,特别是您发布到商店并开发新功能之后.)
  • 产品口味的有效用途,典型的例子是具有免费和付费版本的应用程序.在这种情况下,请检查Ethan的答案并阅读文档:配置Gradle BuildsGradle 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
            // ...
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

以上,debug并且release是默认的构建类型,它们的某些方面进行配置,而beta完全是一种自定义生成类型.要构建不同类型,用途assembleDebug,assembleBeta等等,像往常一样.

同样,您可以使用versionNameSuffix从AndroidManifest覆盖默认版本名称(我发现它非常有用!).例如"0.8"→"0.8-BETA",如上所述.

资源:

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

更新(2016):我已经在我的所有项目中使用了这种方法,我认为这绝对是要走的路.我还将它包含在Futurice的Android Best Practices指南中.

  • 另一个提示:使用Android Studio构建时,请确保您知道[选择了哪种构建变体(类型和风格)](http://stackoverflow.com/questions/17656826/what-product-flavor-does-android-studio -build按默认功能于集结gradle产出).(也许很明显,但我几天前刚刚了解过它.:) (4认同)
  • 嗯,是的 如果你做`gradle assembleDebug`,它只会产生`myapp-debug-unaligned.apk`.建立一个像上面的`beta`这样的自定义类型,`assembleBeta`将生成`myapp-beta-unaligned.apk`和`myapp-beta.apk`([对齐即优化](http://developer.android.com/ tools/help/zipalign.html)),*除非*您为该类型定义`zipAlign false`.请参阅[用户指南](http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Types)中的"可能的属性及其默认值".我认为通常仅使用zipAlign进行实际的发布版本是很好的. (3认同)
  • @Nilzor你可以将它添加到你的AndroidManifest:<uses-permission android:name ="$ {applicationId} .permission.C2D_MESSAGE"/> (2认同)

Eth*_*han 55

你可以这样的事情

android {
    ...

    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }

    flavorDimensions "flavor1", "flavor2"

    productFlavors {
        flavor1 {
            applicationId "com.example.flavor1"
            versionCode 20
        }

        flavor2 {
            applicationId "com.example.flavor2"
            minSdkVersion 14
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android.defaultConfig.applicationId如果要进行一次性构建,也可以更改字段.

取自:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration

  • 对于那些想知道如何告诉Gradle构建特定风味的人:默认情况下会构建所有风格,或者您可以通过运行例如`gradle assembleFlavor1Debug`或`gradle assembleFlavor2Release`来指定一个风格.`gradle tasks`也很有帮助. (3认同)
  • `packageName`与`applicationId`不同,请参阅http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename (3认同)

Ami*_*.io 10

使用1.0.0+的gradle插件版本,您必须使用迁移指南中所述的applicationId

在ProductFlavors中重命名属性

packageName => applicationId

因此,在build.gradle中,您现在将使用:

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

   flavor2 {
      applicationId "com.example.flavor2"
   } 
}
Run Code Online (Sandbox Code Playgroud)


siv*_*ag1 9

根据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
    }
}
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

36164 次

最近记录:

9 年,9 月 前