赞
踩
1,Android开发之修改Manifest中meta-data的数据_今人不见古时月,今月曾经照古人的博客-CSDN博客
2,AndroidManifest中meta-data动态修改的问题_今人不见古时月,今月曾经照古人的博客-CSDN博客
在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");
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");
这样取值因版本而已,比如小米版本取出来的值就是男
,华为版本取出来的就是女
。 #四、实际案例 参考有梦多渠道打包
转载于:https://juejin.cn/post/6844903747944988686
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。