无法在 Android Java 应用程序中读取 BuildConfig.variable
Posted
技术标签:
【中文标题】无法在 Android Java 应用程序中读取 BuildConfig.variable【英文标题】:Cannot read BuildConfig.variable in Android Java app 【发布时间】:2021-12-28 12:11:28 【问题描述】:我在从 build.gradle(:app): 读取变量时遇到了一些问题。
我问了一个问题,如何修复,让 gradle 识别我添加到 root 的 apikey.properties 文件,并且 gradle 不再抱怨。
这是我的老问题:Gradle build won't find the apikey.properties file in root folder
但我无法读取我的 Java 应用程序代码、BuildConfig.SCOPE 中的值以及返回“null”的值。
我的 build.gradle(:app):
Properties properties = new Properties()
if (rootProject.file("apikey.properties").exists())
properties.load(rootProject.file("apikey.properties").newDataInputStream())
def scope = properties.getProperty("SCOPE")
def client_Id = properties.getProperty("CLIENT_ID")
def client_Secret = properties.getProperty("CLIENT_SECRET")
def grant_Type = properties.getProperty("GRANT_TYPE")
android
compileSdkVersion 30
buildToolsVersion "30.0.3"
lintOptions
abortOnError false
defaultConfig
applicationId "com.my_fantastic_app"
minSdkVersion 21
targetSdkVersion 30
versionCode 2
versionName "1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// should correspond to key/value pairs inside the file
buildConfigField("String", "SCOPE", "\"$scope\"")
buildConfigField("String", "CLIENT_ID", "\"$client_Id\"")
buildConfigField("String", "CLIENT_SECRET", "\"$client_Secret\"")
buildConfigField("String", "GRANT_TYPE", "\"$grant_Type\"")
...
println("scope: " + scope)
println("client_Id: " + client_Id)
println("client_Secret: " + client_Secret)
println("grant_Type: " + grant_Type)
...
apikey.properties 文件:
SCOPE=xxx
CLIENT_yyy
CLIENT_zzz
GRANT_TYPE=client_credentiaals
当我尝试从 build.gradle 中打印时,我得到了结果: 范围:空 客户 ID:空 client_Secret:空 grant_Type: null
当我调试 随机 java.class:
String scope = BuildConfig.SCOPE;
String clientId = BuildConfig.CLIENT_ID;
String clientSecret = BuildConfig.CLIENT_SECRET;
String grantType = BuildConfig.GRANT_TYPE;
System.out.println("Scope: " + scope);
System.out.println("clientId: " + clientId);
System.out.println("clientSecret: " + clientSecret);
System.out.println("grantType: " + grantType);
我明白了:
有什么建议吗?我应该重新设计gradle中变量的整个处理吗?任何建议如何做到这一点,以便我可以处理本地和 DevOps 管道/变量?非常感谢!
【问题讨论】:
【参考方案1】:必须在 build.gradle(:app) 中更改 apikey.properties 文件的路径:
Properties properties = new Properties()
if (rootProject.file("app/apikey.properties").exists())
properties.load(rootProject.file("app/apikey.properties").newDataInputStream())
【讨论】:
以上是关于无法在 Android Java 应用程序中读取 BuildConfig.variable的主要内容,如果未能解决你的问题,请参考以下文章