在产品风味中获取 gradle 构建类型
Get gradle build type in product flavor
我需要根据使用的产品风格创建不同的应用程序名称。
虽然通过简单地设置字符串资源很容易,但我不能再这样做了,因为当应用程序上传到 hockeyapp 时,应用程序名称设置为“@string/app_name”而不是 app_name.
通过将清单中的标签设置为“${applicationName}”并将值设置为
,我取得了一些进展
manifestPlaceholders = [ applicationName : appName ];
在产品风味块中,以便在编译时设置值。
当我尝试将构建类型附加到应用程序名称时出现问题。我似乎无法找到一种方法来了解产品风格中当前使用的构建类型。
为了便于阅读,这是构建的精简版本
android {
buildVersionName "1.0.0
buildTypes {
release {
... nothing special
}
uat {
signingConfig signingConfigs.debug
buildType = "uat"
applicationIdSuffix = "." + buildType
}
debug {
signingConfig signingConfigs.debug
buildType = "uat"
applicationIdSuffix = "." + buildType
}
}
productFlavors{
flavor1{
def appName = "app name " + buildType;
manifestPlaceholders = [ applicationName : appName ];
applicationId [id]
def clientIteration = [client iteration]
versionName buildVersionName + clientIteration
versionCode [version code]
}
flavor2{
... same as above with different app name
}
flavor3{
... same as above with different app name
}
}
}
这段代码工作正常,除了变量 'buildType' 始终是最后一个构建类型(在本例中为 debug),这意味着应用程序名称始终以 debug 结尾。
可能值得注意的是,我不需要在发布的应用程序名称末尾附加任何内容。
这个linkhttp://inaka.net/blog/2014/12/22/create-separate-production-and-staging-builds-in-android/可能会帮到你。
如果您有两个 productFlavors(例如,Production 和 Staging)
您应该创建两个不同的资源文件夹:
project/app/src/production/res/values/strings.xml
<resources>
<string name="root_url">http://production.service.com/api</string>
</resources>
project/app/src/staging/res/values/strings.xml
<resources>
<string name="root_url">http://staging.service.com/api</string>
</resources>
您应该在 android {}:
中添加以下代码
productFlavors {
production {
applicationId "com.inaka.app.production"
}
staging {
applicationId "com.inaka.app.staging"
}
}
最好为不同的 productFlavors 使用不同的图标,只需将图标添加到每个不同的资源文件夹中即可。
我知道我参加聚会有点晚了,但如果你想要根据口味使用不同的名字,你应该有这样的东西:
productFlavors{
flavour 1 {
applicationId "your_app_id"
resValue "string", "app_name", "Flavour 1 app name"
.......
}
flavour 2 {
applicationId "your_app_id"
resValue "string", "app_name", "Flavour 2 app name"
.......
}
}
在你的 AndroidManifest.xml:
android:label="@string/app_name"
希望对您有所帮助。
您可以像这样附加值
android {
productFlavors {
Foo {
applicationId "com.myexample.foo"
manifestPlaceholders = [ appName:"Foo"]
}
Bar {
applicationId "com.myexample.bar"
manifestPlaceholders = [ appName:"Bar"]
}
}
buildTypes {
release {
manifestPlaceholders = [ appNameSuffix:""]
}
debug {
manifestPlaceholders = [ appNameSuffix:".Debug"]
applicationIdSuffix ".debug"
}
}
}
并在清单中
<application
android:label="${appName}${appNameSuffix}"
...
</application>
如果你想根据构建类型访问不同的值,你可以这样做
buildTypes {
debug{
buildConfigField "String", "Your_string_key", '"yourkeydebugvalue"'
buildConfigField "String", "SOCKET_URL", '"some text"'
buildConfigField "Boolean", "LOG", 'true'
}
release {
buildConfigField "String", "Your_string_key", '"yourkeyreleasevalue"'
buildConfigField "String", "SOCKET_URL", '"release text"'
buildConfigField "Boolean", "LOG", 'false'
}
}
并使用构建变体访问这些值:
if(!BuildConfig.LOG)
// do something with the boolean value
或
view.setText(BuildConfig.yourkeyvalue);
我需要根据使用的产品风格创建不同的应用程序名称。
虽然通过简单地设置字符串资源很容易,但我不能再这样做了,因为当应用程序上传到 hockeyapp 时,应用程序名称设置为“@string/app_name”而不是 app_name.
通过将清单中的标签设置为“${applicationName}”并将值设置为
,我取得了一些进展manifestPlaceholders = [ applicationName : appName ];
在产品风味块中,以便在编译时设置值。
当我尝试将构建类型附加到应用程序名称时出现问题。我似乎无法找到一种方法来了解产品风格中当前使用的构建类型。
为了便于阅读,这是构建的精简版本
android {
buildVersionName "1.0.0
buildTypes {
release {
... nothing special
}
uat {
signingConfig signingConfigs.debug
buildType = "uat"
applicationIdSuffix = "." + buildType
}
debug {
signingConfig signingConfigs.debug
buildType = "uat"
applicationIdSuffix = "." + buildType
}
}
productFlavors{
flavor1{
def appName = "app name " + buildType;
manifestPlaceholders = [ applicationName : appName ];
applicationId [id]
def clientIteration = [client iteration]
versionName buildVersionName + clientIteration
versionCode [version code]
}
flavor2{
... same as above with different app name
}
flavor3{
... same as above with different app name
}
}
}
这段代码工作正常,除了变量 'buildType' 始终是最后一个构建类型(在本例中为 debug),这意味着应用程序名称始终以 debug 结尾。
可能值得注意的是,我不需要在发布的应用程序名称末尾附加任何内容。
这个linkhttp://inaka.net/blog/2014/12/22/create-separate-production-and-staging-builds-in-android/可能会帮到你。
如果您有两个 productFlavors(例如,Production 和 Staging)
您应该创建两个不同的资源文件夹:
project/app/src/production/res/values/strings.xml
<resources>
<string name="root_url">http://production.service.com/api</string>
</resources>
project/app/src/staging/res/values/strings.xml
<resources>
<string name="root_url">http://staging.service.com/api</string>
</resources>
您应该在 android {}:
中添加以下代码productFlavors {
production {
applicationId "com.inaka.app.production"
}
staging {
applicationId "com.inaka.app.staging"
}
}
最好为不同的 productFlavors 使用不同的图标,只需将图标添加到每个不同的资源文件夹中即可。
我知道我参加聚会有点晚了,但如果你想要根据口味使用不同的名字,你应该有这样的东西:
productFlavors{
flavour 1 {
applicationId "your_app_id"
resValue "string", "app_name", "Flavour 1 app name"
.......
}
flavour 2 {
applicationId "your_app_id"
resValue "string", "app_name", "Flavour 2 app name"
.......
}
}
在你的 AndroidManifest.xml:
android:label="@string/app_name"
希望对您有所帮助。
您可以像这样附加值
android {
productFlavors {
Foo {
applicationId "com.myexample.foo"
manifestPlaceholders = [ appName:"Foo"]
}
Bar {
applicationId "com.myexample.bar"
manifestPlaceholders = [ appName:"Bar"]
}
}
buildTypes {
release {
manifestPlaceholders = [ appNameSuffix:""]
}
debug {
manifestPlaceholders = [ appNameSuffix:".Debug"]
applicationIdSuffix ".debug"
}
}
}
并在清单中
<application
android:label="${appName}${appNameSuffix}"
...
</application>
如果你想根据构建类型访问不同的值,你可以这样做
buildTypes {
debug{
buildConfigField "String", "Your_string_key", '"yourkeydebugvalue"'
buildConfigField "String", "SOCKET_URL", '"some text"'
buildConfigField "Boolean", "LOG", 'true'
}
release {
buildConfigField "String", "Your_string_key", '"yourkeyreleasevalue"'
buildConfigField "String", "SOCKET_URL", '"release text"'
buildConfigField "Boolean", "LOG", 'false'
}
}
并使用构建变体访问这些值:
if(!BuildConfig.LOG)
// do something with the boolean value
或
view.setText(BuildConfig.yourkeyvalue);