AndroidManifest.xml中的meta-data标签、gradle中的manifestPlaceholder的应用

news/2024/7/5 6:20:16 标签: 移动开发, java

一、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 的一个属性,ProductFlavorsandroid的一个属性,可以再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.xmlgradlejava代码三者结合,针对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.im/post/5c243454f265da6163021d5d


http://www.niftyadmin.cn/n/1774058.html

相关文章

tkinter--计算器

刚开始学习tkinter&#xff0c;试着做了个计算器&#xff0c;记录一些常用的函数和使用方法。 from tkinter import * #导入tkinter库 import reroot Tk() #给窗体 root.title(calculator) #设置窗体名字 root.geometry(290x427) root.resizable(widthFalse, heightFalse) ###…

no matching function for call to 'ListNode::ListNode()'

刷leedcode时编译报错 error: no matching function for call to ListNode:ListNode()错误原因为结构体ListNode的变量在使用前没有进行初始化操作 另外&#xff0c;结构体变量的指针在使用之前也需要初始化或赋值操作&#xff0c;将原来代码中的ListNode A&#xff0c;改为Li…

来,了解一下Java内存模型(JMM)

网上有很多关于Java内存模型的文章&#xff0c;在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是&#xff0c;很多人读完之后还是搞不清楚&#xff0c;甚至有的人说自己更懵了。本文&#xff0c;就来整体的介绍一下Java内存模型&#…

python_爬取【搜狗图片】

1.利用python抓取网站上的图片&#xff0c;对于学习python及对网页数据分析处理很有帮助&#xff0c;也可以学习一些web方面的知识&#xff0c;我尝试使用【搜狗图片】搜索到的图片作为抓取对象&#xff0c;抓取【搜狗图片】主页各个标题栏的图片&#xff0c;以及【其他】输入图…

[CQOI2005]三角形面积并

[CQOI2005]三角形面积并 题目大意&#xff1a; 求\(n(n\le100)\)个三角形的面积并。 思路&#xff1a; 自适应辛普森法&#xff0c;玄学卡精度可过。 源代码&#xff1a; #include<cmath> #include<cstdio> #include<cctype> #include<vector> #includ…

12月自我考核

.执行一条命令&#xff0c;直接添加用户zsh1-zsh20 for s in{1..20};do useradd zsh$s;done转载于:https://blog.51cto.com/13803911/2335807

怎样才能学好Python?

Python是一门简单优雅的计算机程序设计语言&#xff0c;相比于C语言、Java编程&#xff0c;Python无论是从语法结构&#xff0c;还是学习难易程度&#xff0c;更适合0基础人员学习&#xff0c;Python应用领域广阔&#xff0c;从云计算、大数据到人工智能&#xff0c;Python无处…

python_爬取【安居客房源信息】

最近在看房子&#xff0c;试着抓取了安居客上房源信息&#xff0c;供大家学习参考。 #-*- encodingUTF-8 -*- from urllib.request import urlopen from bs4 import BeautifulSoup import xlrd import xlwtcity"sz" ###城市缩写 html_sheet5 ###页面数 url&qu…