以编程方式获取manifestPlaceholders

5

我希望在我的代码中读取manifestPlaceholders的值。
我找到了一些代码,但它们总是返回null。

我的gradle文件是:

android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
    applicationId "com.some.test"
    minSdkVersion 19
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        manifestPlaceholders = [app_id: "xxx123"]
    }
    debug {
        manifestPlaceholders = [app_id: "xxx123"]
    }
}
}

我在Onesignal SDK中找到了这段代码,它可以读取gradle中的值,但是它没有起作用:
    try {
        ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
        Bundle bundle = ai.metaData;
        appId = bundle.getString("app_id");
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }

使用这段代码,bundle应该包含manifestPlaceholders的值,但它始终为null。
问题出在哪里?

在您的清单中,设置一个名称为app_id,值为占位符的<meta-data>元素。然后您的Java代码就可以工作了。 - CommonsWare
如果你看到了OneSignal SDK,就会发现清单文件里面什么也没有,我不想这样做。@CommonsWare - FarshidABZ
1
他们的SDK可能在其清单文件中有那个<meta-data>元素。请检查您的Android Studio清单编辑器中的“合并清单”选项卡。或者,使用buildConfigFieldresValue从Gradle向应用程序注入数据,而不是使用清单占位符。 - CommonsWare
1个回答

0

无法从您的类文件(Java/Kotlin)中以编程方式获取。正如CommonsWare在评论中建议的那样,您应该使用buildConfigField或resValue从Gradle将数据注入应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接