我希望在我的代码中读取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<meta-data>
元素。请检查您的Android Studio清单编辑器中的“合并清单”选项卡。或者,使用buildConfigField
或resValue
从Gradle向应用程序注入数据,而不是使用清单占位符。 - CommonsWare