知识点Android控件使用篇Android专题

全面解析:Android之Manifest.xml文件的标签+属

2020-11-04  本文已影响0人  千夜零一

引言

  作为Android开发人员,我们通常更多地关注业务逻辑代码的书写逻辑,但很少去关注Manifest.xml配置文件中的标签和属性,最近我就因为在写业务的时候,误漏了一个该文件中的配置,导致业务逻辑梳理的时候溜得飞起,而运行app却处处崩溃。
  年轻人要讲武德!淦,虽然调试花了整整一个下午,但确实通过这件事认识到了我的短板。闲话不多说,一起来学习吧!

Manifest.xml文件结构目录

<?xml version="1.0" encoding="utf-8"?>

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  
    
    <application>
    
        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>
    
        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>
    
        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>
    
        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>
    
        <provider>
            <grant-uri-permission />
            <meta-data />
            <path-permission />
        </provider>
    
        <uses-library />
    
    </application>

</manifest>

标签详细介绍

manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            package="com.example.mydemo"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    . . .
</manifest>

(1)xmlns:android:定义android命名空间。
(2)package:定义app包名,每个app包名唯一。
(3)sharedUserId:具有相同的uderId并且具有相同签名的APP可以共享和访问彼此的数据,甚至可以在同一个进程里面运行,此时必须设置相同。
(4)sharedUserLabel:给共享userId定义了用户可读标签,只有设置了sharedUserId,此属性才有意义。
(5)versionCode:内部版本号。必须是整数,Integer类型。用来判断版本的升级,每一次发布都必须必之前的要大。如果versionName没有设置,则设置成此值。
(6)versionName:展示给用户看的版本号。为String类型。
(7)installLocation:设置apk文件的默认安装路径。

<uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"     
                                    android:maxSdkVersion="18" />

(1)name:权限的名称。可以是系统定义的权限,也可以是其他应用的权限,或者是使用自定义的权限。
(2)maxSdkVersion:此申请的权限最高的作用Android版本。

自定义权限,以限制访问指定的组件或APP——本APP或其他APP,起到保护的作用。

声明一个权限树,可以在此节点上动态添加权限。

声明一个逻辑上的权限分组。

声明一个Instrumentation类,用来监控APP和系统的交互。Instrumentation对象会在APP的所有组件之前进行实例化。

指定app运行需要的sdk级别

用来设置APP需要的相关硬件和软件的配置。大部分APP都不需要此属性。

用来声明APP所要使用和依赖的单一的软硬件功能。

<application android:allowTaskReparenting=["true" | "false"]
             android:allowBackup=["true" | "false"]
             android:allowClearUserData=["true" | "false"]
             android:backupAgent="string"
             android:backupInForeground=["true" | "false"]
             android:banner="drawable resource"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:directBootAware=["true" | "false"]
             android:enabled=["true" | "false"]
             android:extractNativeLibs=["true" | "false"]
             android:fullBackupContent="string"
             android:fullBackupOnly=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawable resource"
             android:isGame=["true" | "false"]
             android:killAfterRestore=["true" | "false"]
             android:largeHeap=["true" | "false"]
             android:label="string resource"
             android:logo="drawable resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:networkSecurityConfig="xml resource"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:requiredAccountType="string"
             android:resizeableActivity=["true" | "false"]
             android:restrictedAccountType="string"
             android:supportsRtl=["true" | "false"]
             android:taskAffinity="string"
             android:testOnly=["true" | "false"]
             android:theme="resource or theme"
             android:uiOptions=["none" | "splitActionBarWhenNarrow"]
             android:usesCleartextTraffic=["true" | "false"]
             android:vmSafeMode=["true" | "false"] >
    . . .
</application>

(1)name:Application子类(自定义Application)的全名。
(2)taskAffinity:指定APP中所有的Activity所属的任务栈的名字。
(3)allowTaskReparenting:如果此属性设置了true,表明允许某个ActivityX从打开它的那个任务栈移动到它本来所属的taskAffinity任务栈的最上面。
(4)allowBackup:是否允许使用adb backup和adb restore进行数据的备份和恢复。
(5)allowClearUserData:是否允许应用重置用户数据。
(6)backupAgent:用来设置备份代理。
(7)backupInForeground:在allowBackup设置为true的前提下,自动备份(Auto Backup)操作是否在APP运行在前台的时候进行数据备份。
(8)banner:用来轮播图。
(9)debuggable:是否允许APP进入调试模式。一般不设置此值,由编译器自动打包对其进行赋值。
(10)label:用户可读的此APP的标签。
(11)description:关于此APP的详细描述。
(12)directBootAware:Android7.0引入的新特性,是否可以可以在Direct Boot模式下运行。
(13)enabled:是否让系统对application中的组件进行实例化。
(14)extractNativeLibs:Android6.0引入的。安装APK包时是否对其中的.so文件提取出来。
(15)fullBackupContent:Android6.0引入。配合自动备份,用一个XML文件指明备份数据的规则。
(16)fullBackupOnly:当自动备份(Auto Backup)可以使用的时候的时候,是否开启。
(17)hasCode:APP是否包含代码。
(18)hardwareAccelerated:是否为所有的Activity和View进行硬件加速渲染。
(19)icon:APP的桌面显示的图标。
(20)isGame:是否游戏,用来和其他应用区分开来。
(21)killAfterRestore: 当系统恢复出厂设置,APP的设置信息被重置时,改APP是否应该被杀死。
(22)largeHeap:APP是否需要更大的内存空间。
(23)label:APP桌面显示的名称。如果不指定,则桌面名称为包名。
(24)logo:actionBar或toolBar上显示的图标。
(25)manageSpaceActivity:Activity子类的全名。
(26)networkSecurityConfig:指向XML配置文件,此XML配置文件为网络安全配置文件。
(27)permission:设置权限。
(28)persistent:是否让此APP持续地保持运行。
(29)process:设置进程名字。
(30)restoreAnyVersion:APP可以通过任何版本的备份数据进行数据恢复,即使是高版本备份的数据恢复到低版本中去。
(31)resizeableActivity:APP是否设置分屏操作。API24 引入。
(32)supportsRtl:是否支持从右到左布局。
(33)testOnly:设置此APP是否是用来测试的。
(34)theme:APP的主题。
(35)uiOptions:有none和splitActionBarWhenNarrow两项属性值。none为默认值。一般很少用到此项。
(36)usesCleartextTraffic:API23引入。是否允许网络使用明文传输。默认值为true。
(37)vmSafeMode:API22引入。是否让虚拟机运行在安全模式下。默认值为false。

  以键值对的形式为其父级组件元素提供额外的数据,且其父组件可以包含任意多个meta-data元素。父组件元素包括:<application>、<activity>、<activity-alias>、<service>、<receiver>、<provider>。最终meta-data的值都会被封装到Bundle对象放到PackageItemInfo.metaData字段。

(1)name:meta-data的名字,必须具有唯一性。为了确保唯一性,最好用Java风格的规范命名。
(2)value:对应的值。
(3)resource:资源的引用,此处为资源的ID。

大功告成!

参考文章

Android知识点回顾之Manifest文件——来自掘金的大神,知识点总结真的很到位。学习到了!

上一篇下一篇

猜你喜欢

热点阅读