有时根据项目需要,AndroidManifest.xml中的meta-data的值分测试和正式
为了能自动地更换meta-data值,就需要用到manifestPlaceholders
语法:manifestPlaceholders = [FieldName: FieldValue]
示例如下
build.gradle (Module: app)
apply plugin: 'com.android.application'android { compileSdkVersion 28 defaultConfig { applicationId "com.bu_ish.debug_release_test" minSdkVersion 19 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' buildConfigField "String", "TextToShow", "\"当前处于发布模式\"" manifestPlaceholders = [ManifestField: "发布模式下的清单字段"] } debug { buildConfigField "String", "TextToShow", "\"当前处于调试模式\"" manifestPlaceholders = [ManifestField: "调试模式下的清单字段"] } }}dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'}
AndroidManifest.xml
上例中,名为ManifestField的meta-data的值为"发布模式下的清单字段"(Release模式下)或"调试模式下的清单字段"(Debug模式下)
获取该meta-data的示例如下
try { String manifestField = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA).metaData.getString("ManifestField"); new AlertDialog.Builder(MainActivity.this).setMessage(manifestField).show(); } catch (PackageManager.NameNotFoundException ex) { Log.e(TAG, null, ex); }