android – 如何在build.gradle中获取资源值?

resValue方法(或任何它被称为)允许您在buildTypes或productFlavors中设置资源值.是否有相应的方法获取由resValue设置的资源值?

似乎在buildTypes之前对productFlavors进行了评估,因此在buildTypes中设置的resValue优先.我想在调试版本中附加“调试”到应用程序名称,但是我需要获取在产品风格中设置的值才能附加到它.

编辑:我试过marcinKoziński的建议使用一个变量,但所有的产品风格都在任何构建类型之前进行评估.因此,这不行:

android {
    String appName = ""

    productFlavors {
        Foo {
            appName = "Foo"
        }

        Bar {
            appName = "Bar"
        }
    }

    buildTypes {
        release {
            resValue "string","app_name",appName 
        }

        debug {
            resValue "string",appName + " Debug"
        }
    }
}

在buildTypes中,appName始终具有最后一个产品风格的值.所以在这个例子中,所有的构建都会收到名称“Bar”或“Bar Debug”.

基本上,我需要一个类似于applicationIdSuffix的resValueSuffix.显然没有这样的动物存在. com.android.application插件是否暴露了我可以用来实现这一点的任何东西?

解决方法

如果您只尝试设置App Label(或其他清单值),则可以使用清单占位符来解决此问题.
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"
        }
    }
}

然后在您的Android清单中,您只需将这两个占位符用于您的应用程序名称(或其他值)

<application
        android:label="${appName}${appNameSuffix}"
        ...
 </application>

这允许您将所有4个变体并排安装在单个设备上,并在应用程序抽屉/启动器中给出不同的名称.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...