理解 AndroidMainfest.xml

本文详细介绍了AndroidManifest.xml的各个层级和属性,包括、<基本配置>和<应用属性>。讨论了如package、sharedUserId、versionCode、versionName等关键属性,以及等组件的配置。同时,讲解了权限声明、Intent过滤器、元数据和数据存储等方面,为理解和使用AndroidManifest.xml提供全面指导。
摘要由CSDN通过智能技术生成

理解《Android的AndroidManifest.xml》

上篇:初识 AndroidMainfest.xml

三、AndroidManifest.xml 属性

第一层(< Manifest >):(属性)

  • xmlns:android:定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。

  • package:指定本应用内java主程序包的包名,它也是一个应用进程的默认名称。

  • sharedUserId:表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。

  • sharedUserLabel:一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义。

  • versionCode:是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。。。

  • versionName:这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。。。

  • installLocation:安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal;

    选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上);

    选择auto,系统将会根据存储空间自己去适应;

    选择internalOnly是指必须安装到内部才能运行;

    (注:需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD卡上。现默认为安装在内部,如果把APP安装在SD卡上,首先得设置你的level为8,并且要配置android:installLocation这个参数的属性为preferExternal)。

第二层(< 基本配置 >):(属性)

  • uses-permission :最经常使用的权限设定标签,我们通过设定android:name属性来声明相应的权限名。

    <manifest ...>  
    ... ...  
      <!-- 网络相关功能 -->  
      <uses-permission android:name="android.permission.INTERNET" />  
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
      <!-- 读取电话状态 -->  
      <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
      <!-- 通知相关功能 -->  
      <uses-permission android:name="android.permission.VIBRATE" />  
    ... ...  
    </manifest>  
  • permission:权限声明标签,定义了供给< uses-permission >使用的具体权限,通常情况下我们不需要为自己的应用程序声明某个权限,除非需要给其他应用程序提供可调用的代码或者数据,这个时候你才需要使用< permission >标签。该标签中提供了android:name权限名标签,权限图标android:icon以及权限描述android:description等属性,另外还可以和< permission-group >以及< permission-tree >配合使用来构造更有层次的、更有针对性权限系统。

    <permission android:description="string resource" 
    android:icon="drawable resource"  
    android:label="string resource"  
    android:name="string"  
    android:permissionGroup="string"  
    android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] /> 
  • Instrumentation:用于声明Instrumentation测试类来监控Android应用的行为并应用到相关的功能测试中,其中比较重要的属性有:测试功能开关android:functionalTest,profiling调试功能开关android:handleProfiling,测试用例目标对象android:targetPackage等。另外,我们需要注意的是Instrumentation对象是在应用程序的组件之前被实例化的,这点在组织测试逻辑的时候需要被考虑到。标签语法范例如下。

    <instrumentation android:functionalTest=["true" | "false"]  
      android:handleProfiling=["true" | "false"]  
      android:icon="drawable resource"  
      android:label="string resource"  
      android:name="string"  
      android:targetPackage="string" /> 
  • uses-sdk:描述应用所需的api level,就是版本。在此属性中可以指定支持的最小版本,目标版本以及最大版本。

    <uses-sdk android:minSdkVersion="integer"
            android:targetSdkVersion="integer"
            android:maxSdkVersion="integer"/>
  • uses-configuration与uses-feature:这两个标签都是用于描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装。< uses-configuration >标签中,比如有些设备带有D-pad或者Trackball这些特殊硬件,那么android:reqFiveWayNav属性就需要设置为true;而如果有一些设备带有硬件键盘,android:reqHardKeyboard也需要被设置为true。另外,如果设备需要支持蓝牙,我们可以使用< uses-feature android:name=”android.hardware.bluetooth” />来支持这个功能。这两个标签主要用于支持一些特殊的设备中的应用。

    <uses-configuration android:reqFiveWayNav=["true" | "false"]   
      android:reqHardKeyboard=["true" | "false"]  
      android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]  
      android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]  
      android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />  
    
    <uses-feature android:name="string"  
      android:required=["true" | "false"]  
      android:glEsVersion="integer" />  
  • 用于指定Android应用可使用的用户库,除了系统自带的android.app、android.content、android.view和android.widget这些默认类库之外,有些应用可能还需要一些其他的Java类库作为支持,这种情况下我们就可以使用< uses-library >标签让ClassLoader加载其类库供Android应用运行时用。

    <uses-library android:name="string"
      android:required=["true" | "false"] />
  • supports-screens:对于一些应用或者游戏来说

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值