【问题标题】:Set variables in build.gradle在 build.gradle 中设置变量
【发布时间】:2018-09-21 19:36:07
【问题描述】:

在我的build.gradle模块:app)中,我指定了一个buildConfigField 和一个resValue 变量。

buildTypes {
    release {
        debuggable false
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        buildConfigField "String", "APP_EXP_DATE", "\"DEC 31 23:59:59 EDT 2018\""
        resValue         "String", "app_exp_date", "\"DEC 31 23:59:59 EDT 2018\""
    }
}

然后我希望它们能像这样在我的 Java 代码中使用:

BuildConfig.APP_EXP_DATE
R.string.app_exp_date

但不幸的是,我遇到了以下错误:

错误:找不到符号变量 APP_EXP_DATE

错误:类型的非法开始

如何才能在我的 Java 代码中从 gradle 访问变量?

【问题讨论】:

  • 我只使用release buildType,没有使用debug buildType,但这不会导致任何问题。
  • 我认为可能是这样。即使你不使用调试,Android Studio 也不知道。

标签: android android-studio gradle android-gradle-plugin build.gradle


【解决方案1】:

嗯,你有一些选择:

  1. 在 defaultConfig 下定义你的字符串和值如下:

    android {
        // your code
        defaultConfig {
            // your code
            resValue "string", "<key>", "<value>" 
            buildConfigField "string", "<key>", "<value>"
            // ...
        }
        // your code
    }
    
  2. 你可以把你的字符串放在 Release 和 Debug 类型中

    buildTypes {
        release {
            // your code
            resValue "string", "<key>", "<value>" 
            buildConfigField "string", "<key>", "<value>"
            // ...
        }
        debug {
            // your code 
            resValue "string", "<key>", "<value>" 
            buildConfigField "string", "<key>", "<value>"
            // ...
        }
    }
    

希望对您有所帮助!

【讨论】:

  • 有些包有相同的BuildConfig,你确定你选择了你的项目吗?您是否也遇到与您的问题相同的错误?
  • 我发现了问题。 buildConfigField 必须在模块的build.gradle 中定义,而不是应用程序的。
  • 完美!我为你感到高兴;)
【解决方案2】:

我怎样才能使它能够从 gradle 中访问变量 我的 Java 代码?

您的代码中的问题似乎在 release buildType 中使用,这可能会导致问题(未解决。

但是,应该是这样的:

gradle.properties:

ExpDate="DEC 31 23:59:59 EDT 2018"

app/Build.gradle中(注意应该在android块代码中):

def APP_EXP_DATE = '"' + ExpDate + '"' ?: '"Define Expire Date"'
android.buildTypes.each { type -> 
    type.buildConfigField 'String', 'APP_EXP_DATE', ExpDate

}

用法:

BuildConfig.APP_EXP_DATE

作为Toast

Toast.makeText(activity, BuildConfig.APP_EXP_DATE, Toast.LENGTH_LONG).show()

【讨论】:

  • 不幸的是,我遇到了与您的解决方案相同的错误消息。
  • 对不起!我正在编辑答案。请再次检查。刚刚进行了更改,使其与您的完全一样。
  • 您还在使用buildTypes 块中的那些代码吗?因为我刚刚进行了编辑,它应该在 android 块代码中 并与那些 buildTypes 分开。
  • 我所有的ext. 变量都在我项目的build.gradle 中定义。该部分在很长一段时间内都可以正常工作。
  • 我已经删除了所有ext. 变量并使用了直接输入......并且没有任何变化 - 同样的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2014-05-16
相关资源
最近更新 更多