Gradle的基本操作:AndroidManifest.xml中
2018-12-26 本文已影响0人
ag4kd
一、manifest中的元数据标签
在Android中环可以在manifest设置元信息meta-data
为四大组件配置元信息,然后通过Java代码读取的来使用。
语法格式
<meta-data android:name="string"
android:resource="resource specification"
android:value="string" />
1.Activity标签中:
<activity...>
<meta-data android:name="sex" android:value="man"></meta-data>
</activity>
在代码中动态获取:
ActivityInfo info=this.getPackageManager().getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
String msg =info.metaData.getString("sex");
2.application标签中:
<application...>
<meta-data android:name="sex" android:value="man"></meta-data>
</application>
在代码中动态获取:
ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
String msg=appInfo.metaData.getString("sex");
3.在service标签中:
<service android:name="MetaDataService">
<meta-data android:name="sex" android:value="man"></meta-data>
</service>
在代码中获取:
ComponentName cn=new ComponentName(this, MetaDataService.class);
ServiceInfo info=this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
String msg=info.metaData.getString("sex");
4.在receive标签中:
<receiver android:name="MetaDataReceiver">
<meta-data android:name="sex" android:value="man"></meta-data>
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>
在代码中获取:
ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
ActivityInfo info=context.getPackageManager()
.getReceiverInfo(cn, PackageManager.GET_META_DATA);
String msg=info.metaData.getString("sex");
二、AndroidGradle为我们提供了非常便捷的方式让我们来替换AndroidManifest文件中的内容,他就是manifestPlacholder、Manifest占位符。
ManifestPlaceholders 是 ProductFlavor
的一个属性,ProductFlavors
是android
的一个属性,可以再android
闭包中配置,ProductFlavors
同时又是ProductFlavor
的一个容器,可以在ProductFlavors
的闭包参数中配置任意个ProductFlavor
apply plugin: 'command.android.application'
android {
compileSdkVersion 28
defaultConfig {...}
buildTypes {...}
flavorDimensions "api"
productFlavors {
xiaomi {
dimension "api"
manifestPlaceholders.put("sex","男")
}
huawei {
dimension "api"
applicationIdSuffix ".demo"
manifestPlaceholders.put("sex","女")
}
full {
dimension "api"
applicationIdSuffix ".full"
versionNameSuffix "-full"
}
tetd {
dimension "api"
}
}
}
dependencies {...}
三、AndroirdManifest.xml
、gradle
和java代码
三者结合,针对appliation
中的meta-data
举例
1.在AndroirdManifest.xml中的application
节点中添加
<application...>
<meta-data android:name="sex" android:value="$sexValue"></meta-data>
</application>
2.在profuctFlavor
中设置占位符的值。比如小米版本的设置为男
,华为版本的设置为女
productFlavors {
xiaomi {
dimension "api"
manifestPlaceholders.put("sexValue","男")
}
huawei {
dimension "api"
applicationIdSuffix ".demo"
manifestPlaceholders.put("sexValue","女")
}
}
3.在Java代码中
ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
String msg=appInfo.metaData.getString("sex");
这样取值因版本而已,比如小米版本取出来的值就是男
,华为版本取出来的就是女
。
四、实际案例
根据
参考有梦多渠道打包