无法在 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的主要内容,如果未能解决你的问题,请参考以下文章

android怎么用流 读取云端图片

无法读取光标窗口android的行

android读取一个文件夹有多少个文件

无法读取文件夹。 (Android-文件-对话框)

无法从 Flutter Web 读取 Firestore 中的数据(适用于 iOS 和 android)

Java / Android - 读取、操作 XML 文件并将其保存到内部存储