Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 定义';resValue';使用现有的字符串定义_Android_Gradle_Android Gradle Plugin_Build.gradle_Android Resources - Fatal编程技术网

Android 定义';resValue';使用现有的字符串定义

Android 定义';resValue';使用现有的字符串定义,android,gradle,android-gradle-plugin,build.gradle,android-resources,Android,Gradle,Android Gradle Plugin,Build.gradle,Android Resources,我感兴趣的是在strings.xml文件而不是build.gradle文件中定义我的许多风格的应用程序。考虑到多种风格,我想要一个简化的发行版/调试版本: buildTypes { release { signingConfig signingConfigs.release resValue "string", "app_name", "@string/prod_name" } debug { applicationId

我感兴趣的是在strings.xml文件而不是build.gradle文件中定义我的许多风格的应用程序。考虑到多种风格,我想要一个简化的发行版/调试版本:

  buildTypes {
    release {
        signingConfig signingConfigs.release
        resValue "string", "app_name", "@string/prod_name"
    }
    debug {
        applicationIdSuffix ".beta"
        resValue "string", "app_name", "@string/beta_name"
    }
然后在我的每个构建风格的自定义res/values/strings.xml文件中,我将分别定义它们自己的“prod\u name”和“beta\u name”。我还想使用这个类似的框架来定义提供者的权限等

目前,通过gradle命令行可以很好地构建该功能,但Android Studio无法识别该功能

Android Studio错误:

我在“generated.xml”中发现了这一点

<!-- Values from build type: debug -->
<string name="app_name">@string/beta_name</string>

我正在使用Android Studio 2.1 Preview 5

根据我的经验,您无法在
resValue
DSL中解析
@string/my_string
。Gradle将该值作为简单字符串放入资源文件中

在这种情况下,您可以使用不同的文件夹来实现:

只需使用:

src/release/res/values/strings.xml
src/debug/res/values/strings.xml
如果您希望为每个构建变量(构建类型+风格)使用不同的资源,您可以使用:

src/flavor1Release/res/values/strings.xml
src/flavor1Debug/res/values/strings.xml
src/flavor2Release/res/values/strings.xml
src/flavor2Debug/res/values/strings.xml

这实际上是可能的。您只需在defaultConfig中将这些字符串声明为空,如下所示:

defaultConfig {
    resValue "string", "prod_name", ""
    resValue "string", "beta_name", ""
}

您可以在渐变中为构建风格添加res值

productFlavors {

   prod {
        dimension "default"
        resValue "string", "app_name", "your prod app name"    
    }


    staging {
       dimension "default"
        resValue "string", "app_name", "your staging app name"    

    }
}

您能否更具体地说明“Android Studio无法识别”的确切含义?为什么您不将正确的字符串放入正确的资源目录中
src/release/res/values/strings.xml
对于特定于发行版的字符串,对于调试版本,则使用
src/debug/res/values/strings.xml
?如果我已经在处理多个风格呢?我有我的常规“res”目录,以及我的flavor res目录:“/one/res/”、“/two/res”等。。。我最初试图在每个flavor的res子目录中定义“prod_name”和“beta_name”,从而将目录的2倍进一步减少到最小……在本例中,只需在这些文件中添加字符串(在buildtype中具有不同的值)。在文档中找不到很好的示例。如何为每种风格定义调试和发布目录。我已经有了我的主要“res”以及“one/res”、“two/res”等。。。这与使用Gradle的
resValues
有何不同?这不会与每个flavor的strings.xml文件中的定义冲突吗?flavor的strings.xml文件覆盖了gradle的“defaultConfig”?请注意,这似乎是必需的,因为更新到gradle插件v3.5.0最初的目的是将所有定义保留在各种strings.xml文件中,而不是直接在gradle文件中设置定义。
productFlavors {

   prod {
        dimension "default"
        resValue "string", "app_name", "your prod app name"    
    }


    staging {
       dimension "default"
        resValue "string", "app_name", "your staging app name"    

    }
}