文档开发者中心
我的

AndroidManifest.xml文件详细解析

PART1:AndroidManifest.xml概要

每一个Android应用都应该包含一个manifest文件,即AndroidManifest.xml,是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities,ContentProviders,Services,和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)。


点赞
收藏
回复
19
分享
举报
浏览23141 发布于2019-07-15 11:05未知归属地
全部评论
最多点赞
最新发布
最早发布

每个Android应用都需要一个名为AndroidManifest.xml的程序清单文件,这个清单文件名是固定的并且放在每个Android应用的根目录下。它定义了该应用对于Android系统来说一些非常重要的信息。Android系统需要这些信息才能正常运行该应用。Android程序清单文件主要具有下面作用:

l· 它给应用程序Java包命名,这个包名作为应用程序唯一标识符。
l· 它描述了应用程序中的每个程序组件—Activity,Service,Broadcast Receivers和Content Provider。它描述了实现每个应用程序组件的类名称和组件能力(比如组件能够处理哪种类型的Intent消息)。这些描述帮助Andoid操作系统了解这些程序组件和在何种条件下可以启动这些程序组件。
l· 它决定哪些进程用来运行应用程序组件。
l· 它描述了应用程序使用某些受保护的程序API或和其它应用程序交互所需的权限。
l· 它也描述了其它应用程序和该应用交互时应拥有的权限。
l· 它给出了应用运行所需AndroidAPI版本的最低要求。
l· 它列出了应用程序需要调用的开发库定义。

18楼回复于2019-07-25 09:01 未知归属地

PART11:intent-filter标签

语法:
<intent-filter android:icon='drawable resource'
              android:label='string resource'
              android:priority='integer'>
   . . .
</intent-filter>
说明:
        这个元素用于指定Activity、Service或Broadcast Receiver能够响应的Intent对象的类型。
过滤器的大多数内容是通过<action>、<category>和<data>子元素来描述的。
属性:
android:icon
        图片
android:label
        标签
android:priority='integer'
        优先级

17楼回复于2019-07-24 09:58 未知归属地

PART10:receiver标签

语法:
<receiver android:enabled=['true' | 'false']
         android:exported=['true' | 'false']
         android:icon='drawable resource'
         android:label='string resource'
         android:name='string'
         android:permission='string'
         android:process='string'>
   . . .
</receiver>

说明:
        这个元素用于声明一个广播接收器(一个BroadcastReceiver 子类),作为应用程序的组件之一。广播接收器能够让应用程序接收那些由系统或其他应用程序发出的广播Intent对象,即使是在该应用程序的其他组件没有运行的时候,也能够接收来自系统或其他应用程序的广播消息。
有两种方式让系统知道本应用程序用户一个广播接收器:
        1. 在应用程序的清单文件中,使用本元素来声明注册一个广播接收器;
        2. 在代码中动态的创建一个广播接收器,并使用Context.registerReceiver()方法来注册它。有关更多动态创建接收器的方法,请看BoradcastReceiver类说明。

属性:
android:enabled
        是否能够实例化这个广播接收器。默认值是true。
android:exported
        是否能够接收来自应用程序外部的消息。默认值是true。
android:icon
        图标
android:label
        标签
android:name
        这个属性值要用广播接收器的实现类的类名来设置,它是BroadcastReceiver类的一个子类。通常要使用类的全名来设置(如:com.example.project.ReportReceiver)。但是,也可以使用简写(如:.ReportReceiver)。系统会自动的把<manifest>元素中的package属性所设定的包名添加到这个简写的名称上。这个属性没有默认值,这个名字必须被指定。
android:permission
        定义把消息发送给该广播接收器的广播器所必须要有的权限。如果没有设置这个属性,那么<application>元素的permission属性所设置的权限就适用于这个广播接收器。如果<application>元素也没有设置权限,那么该接收器就不受权限的保护。
android:process
        设置该广播接收器应该运行在那个进程中的进程名。通常,应用程序的所有组件都在给应用程序创建的默认进程中运行,它有与应用程序包名相同的名称。<application>元素的process属性能够给它的所有组件设置一个不同的默认进程,但是它的每个组件自己的process属性能够覆盖这个默认设置,这样就允许把一个应用程序分离到多个进程中。

展开全部
16楼回复于2019-07-24 09:56 未知归属地

PART9:provider 标签

语法:
<provider android:authorities='list'
         android:enabled=['true' | 'false']
         android:exported=['true' | 'false']
         android:grantUriPermissions=['true' | 'false']
         android:icon='drawable resource'
         android:initOrder='integer'
         android:label='string resource'
         android:multiprocess=['true' | 'false']
         android:name='string'
         android:permission='string'
         android:process='string'
         android:readPermission='string'
         android:syncable=['true' | 'false']
         android:writePermission='string'>
   . . .
</provider>

说明:
        这个元素用于声明一个内容提供器,它对应一个ContentProvider类的子类。它提供了对由应用程序管理的数据的结构化的访问。应用程序使用的所有的内容提供器都必须在其清单文件中由<provider>元素来声明。对于那些没有在清单中声明的内容提供器,系统看不到,也不会运行。(只需要声明那些作为该应用程序一部分的来开发的那些内容提供器,而不是那些由应用程序使用的由其他人开发本应用之外的那些内容提供器)。
        Android系统通过content:URI的授权部分来识别内容提供器。例如,假设下列的URI要传递给ContentResolver.query()方法:
content://com.example.project.healthcareprovider/nurses/rn
content:表示数据是属于内容提供器的,授权(com.example.project.healthcareprovider):标识着一个具体的提供器。因此授权必须唯一的。通常,就像这个例子一样,授权是一个完整的ContentProvider子类的名称。URI的路径部分被内容提供器用来标识具体的数据子集,但是那些路径没有被声明在清单文件中。
属性:
android:authorities
        标识内容提供器范围内的数据URI的授权列表,有多个授权时,要用分号来分离每个授权。为了避免冲突,授权名应该使用Java样式的命名规则(如:com.example.provider.cartoonprovider)。通常,用ContentProvider子类名称来设定这个属性。
        这个属性没有默认值,至少要指定一个授权。
android:enabled
        指定这个内容提供器是否能够被系统安装。默认值是true。
android:exported
        指定该内容提供器是否能够被其他的应用程序组件使用。默认值是true。
android:grantUriPermission
        设定那些对内容提供的数据没有访问权限的访问者,是否能够被授予访问的权限,这个权限是临时性的,它会克服由readPermission、writePermission和permission属性的设置限制。如果这个属性设置为true,那么权限就可以授予访问者,否则不会授予没有访问权限的访问者。如果设置为true,则权限可以临时被授予内容提供器的任何数据。如果设置为false,则权限只能被授予<gran-uri-permission>子元素中所列出的数据子集。默认值是false。
android:icon
        图标。
android:initOrder
        定义内容提供器应该被实例化的顺序,这个顺序是相对与相同进程所拥有的其他内容提供器的。当内容提供器间有相互的依赖时,就需要设置这个属性,以确保它们能够按照其依赖的顺序被创建。这个属性值是一个简单的整数,大的数字要被优先初始化。
Android:label
        标签。
android:multiprocess
        设定是否能够在每个使用该内容提供器的客户端进程中都创建一个内容提供器的实例。默认值是false。
android:name
        名称。
android:permission
        设定客户端在读写内容提供器的数据时必须要有的权限的名称。
android:process
        定义内容提供器应该运行在那个进程中的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的默认进程中。它有与应用程序包相同的名称。<application>元素的process属性能够给其所有的组件设置一个不同的默认进程。但是每个组件都能够用它们自己的process属性来覆盖这个默认设置,从而允许把应用程序分离到不同的多个进程中。
android:readPermission
        设置查询内容提供器的数据时,客户端所必须要有的权限。
android:syncable
        设定内容提供器控制下的数据是否要与服务器上的数据进行同步。
android:writePermission
        设置修改内容提供器的数据时,客户端所必须要有的权限。

展开全部
15楼编辑于2019-07-24 09:55 未知归属地

PART8:service标签

语法:
<service android:enabled=['true' | 'false']
        android:exported=['true' | 'false']
        android:icon='drawable resource'
        android:label='string resource'
        android:name='string'
        android:permission='string'
        android:process='string'>
   . . .
</service>

说明:
        这个元素用于声明一个服务(Service类的子类)作为应用程序的组件之一。跟Activity不一样,服务没有可见的用户界面。它们被用于实现长时的后台操作,或提供能够被其他应用程序调用的通信API。
所有的服务都必须用清单文件中的<service>元素来代表。任何没有在清单中声明的服务都不能被系统看到,也不会被运行。
属性:
android:enabled
        是否能够被实例化。默认值是true。
android:exported
        否能够被其他应用程序组件调用或跟它交互。默认值是true。
android:icon
        图标
android:label
        标签
android:name
        定实现该服务的Service子类的类名。它应该是完整的Java类名(如:com.example.project.RoomService)。但是,也可以使用简写(如:.RoomService),系统会把<manifest>元素中package属性所设定的值添加到简写名称的前面。这个属性没有默认值,名称必须要指定。
android:permission
        这个属性定义了要启动或绑定服务的实体必须要有的权限。如果调用者的startService()、bindService()和stopService()方法没有被授予这个权限,那么这些方法就不会工作,并且Intent对象也不会发送给改服务。如果这个属性没被设置,那么通过<appliction>元素的permission属性所设定的权限就会适用于该服务。如果<application>元素也没有设置权限,则该服务不受权限保护。
android:process
        设定服务所运行的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的进程中,进程名与应用程序的包名相同。<application>元素的process属性能够给应用程序的所有组件设置一个不同的默认名称。但是每个组件自己的process属性都能够覆盖这个默认值,这样允许把应用程序分离到不同的多个进程中。
        如果这个属性值用“:”开头,则在需要的时候系统会创建一个新的,应用程序私有的进程,并且该服务也会运行在这个进程中。如果这个属性值用小写字母开头,那该服务就会运行在以这个属性值命名的全局进程中,它提供了使其工作的权限。这样就允许不同的应用程序组件来共享这个进程,从而降低资源的使用。

展开全部
14楼编辑于2019-07-24 09:51 未知归属地

PART7:activity-alias标签

语法:

<activity-alias android:enabled=['true' | 'false']
               android:exported=['true' | 'false']
               android:icon='drawable resource'
               android:label='string resource'
               android:name='string'
               android:permission='string'
               android:targetActivity='string'>
   . . .
</activity-alias>

说明:
        这个元素用于给targetActivity属性所指定Activity设定一个别名,目标Activity必须跟别名Activity在同一个应用程序中,并且这个Activity必须在别名之前被声明。
        别名会作为一个独立的实体来代表目标Activity。它能够有自己的Intent过滤器设置,而不是目标Activity自己的Intent过滤器,通过别名和系统处理别名的方式来判断哪个Intent对象能够激活目标。例如:别名中的Intent过滤器可以指定“android.intent.action.MAIN”和“android.intent.category.LAUNCHER”标记,这样即使在目标Activity的过滤器上没有指定这些标记,也会让它在应用的启动器窗口中表示。
        除了targetActivity属性以外,<activity-alias>的其他属性是<activity>属性的一个子集。对于子集中的属性,不会把目标Activity中所设置的任何值转交给别名Activity。但是,对于子集中所没有的属性,则给目标Activity所设置的值也会应用到别名Activity。
属性:
android:enabled
        设定系统能否通过这个别名来实例化目标Activity,如果设置为true,则可以实例化,否则不能实例化。默认值是true。
android:exported
        设定其他的应用程序组件能否通过这个别名来启动目标Activity,如果设置为true,则能够启动,否则不能启动。默认值是false。
android:icon
        图标。
android:label
        标签。
android:name
        给别名设置一个唯一的名字。这个名字应该像一个完全限定的类名,但是不想目标Activity的名字那样,别名的名称是任意的,它不对应一个实际的类名。
android:permission
        设定权限的名称,客户端必须有这个权限才能启动目标Activity或通过别名来获取目标Activity以便做某些事情。如果startActivity()或startActivityForResult()方法的调用者没有被授予指定的权限,那么目标Activity就不会被激活。
android:targetActivity
        这个属性用于设置通过别名所能够激活的那个Activity的名字。这个名字必须跟它前面的<activity>元素的name属性匹配。
参考:
01, activity-alias的使用

展开全部
13楼编辑于2019-07-24 09:48 未知归属地

PART6:activity标签

语法:

<activity android:allowTaskReparenting=['true' | 'false']
         android:alwaysRetainTaskState=['true' | 'false']
         android:clearTaskOnLaunch=['true' | 'false']
         android:configChanges=['mcc', 'mnc', 'locale',
                                'touchscreen', 'keyboard', 'keyboardHidden',
                                'navigation', 'screenLayout', 'fontScale', 'uiMode',
                                'orientation', 'screenSize', 'smallestScreenSize']
         android:enabled=['true' | 'false']
         android:excludeFromRecents=['true' | 'false']
         android:exported=['true' | 'false']
         android:finishOnTaskLaunch=['true' | 'false']
         android:hardwareAccelerated=['true' | 'false']
         android:icon='drawable resource'
         android:label='string resource'
         android:launchMode=['multiple' | 'singleTop' |
                             'singleTask' | 'singleInstance']
         android:multiprocess=['true' | 'false']
         android:name='string'
         android:noHistory=['true' | 'false']  
         android:permission='string'
         android:process='string'
         android:screenOrientation=['unspecified' | 'user' | 'behind' |
                                    'landscape' | 'portrait' |
                                    'reverseLandscape' | 'reversePortrait' |
                                    'sensorLandscape' | 'sensorPortrait' |
                                    'sensor' | 'fullSensor' | 'nosensor']
         android:stateNotNeeded=['true' | 'false']
         android:taskAffinity='string'
         android:theme='resource or theme'
         android:uiOptions=['none' | 'splitActionBarWhenNarrow']
         android:windowSoftInputMode=['stateUnspecified',
                                      'stateUnchanged', 'stateHidden',
                                      'stateAlwaysHidden', 'stateVisible',
                                      'stateAlwaysVisible', 'adjustUnspecified',
                                      'adjustResize', 'adjustPan'] >  
   . . .
</activity>

属性(ATTRIBUTES):
android:allowTaskReparenting
        这个属性用于设定Activity能够从启动它的任务中转移到另一个与启动它的任务有亲缘关系的任务中,转移时机是在这个有亲缘关系的任务被带到前台的时候。如果设置了true,则能够转移,如果设置了false,则这个Activity必须要保留在启动它的那个任务中。
        如果这个属性没有设置,那么其对应的<application>元素的allowTaskReparenting属性值就会应用到这个Activity上。它的默认值是false。
通常,当Activity被启动时,它会跟启动它的任务关联,并它的整个生命周期都会保持在那个任务中。但是当Activity的当前任务不在显示时,可以使用这个属性来强制Activity转移到与当前任务有亲缘关系的任务中。这种情况的典型应用是把应用程序的Activity转移到与这个应用程序相关联的主任务中。
例如,如果一个电子邮件消息中包含了一个网页的链接,点击这个链接会启动一个显示这个网页的Activity。但是,由e-mail任务部分启动的这个Activity是由浏览器应用程序定义的。如果把它放到浏览器的任务中,那么在浏览器下次启动到前台时,这个网页会被显示,并且在e-mail任务再次显示时,这个Activity有会消失。
        Activity的亲缘关系是由taskAffinity属性定义的。通过读取任务的根Activity的亲缘关系来判断任务的亲缘关系。因此,通过定义,任务中的根Activity与任务有着相同的亲缘关系。因此带有singleTask或singleInstance启动模式的Activity只能是任务的根节点,Activity的任务归属受限于standard和singleTop模式。

android:alwaysRetainTaskState
        这个属性用于设置Activity所属的任务状态是否始终由系统来维护。如果设置为true,则由系统来维护状态,设置为false,那么在某些情况下,系统会允许重设任务的初始状态。默认值是false。这个属性只对任务根节点的Activity有意义,其他所有的Activity都会被忽略。
        通常,在某些情况中,当用户从主屏中重新启动一个任务时,系统会先清除任务(从堆栈中删除根节点Activity之上的所有Activity)。
        但是,当这个属性被设置为true时,用户会始终返回到这个任务的最后状态,而不管中间经历了哪些操作。这样做是有好处的,例如,Web浏览器的应用就会保留很多用户不想丢失的状态,如多个被打开的标签页。

android:clearTaskOnLaunch
        这个属性用于设定在从主屏中重启任务时,处理根节点的Activity以外,任务中的其他所有的Activity是否要被删除。如果设置为true,那么任务根节点的Activity之上的所有Activity都要被清除,如果设置了false,就不会被清除。默认设置时false。这个属性只对启动新任务(或根Activity)的那些Activity有意义,任务中其他所有的Activity都会被忽略。
        当这个属性值被设置为true,用户再次启动任务时,任务根节点的Activity就会被显示,而不管在任务的最后做了什么,也不管任务使用Back按钮,还是使用Home离开的。当这个属性被设置为false时,在某些情况中这个任务的Activity可以被清除,但不总是这样的。
例如,假设某人从主屏中启动了Activity P,并且又从P中启动了Activity Q。接下来用户按下了Home按钮,然后由返回到Activity P。通常用户会看到Activity Q,因为这是在P的任务中所做的最后的事情。但是,如果P把这个属性设置为true,那么在用户按下Home按钮,任务被挂起时,Activity P之上的所有Activity(本例中是Activity Q)都会被删除。因此当用户再次返回到本任务时,用户只能看到Activity P。
        如果这个属性和allowTaskReparenting属性都被设置为true,那些被设置了亲缘关系的Activity会被转移到它们共享的亲缘任务中,然后把剩下的Activity都给删除。

android:configChanges
        这个属性列出了那些需要Activity进行自我处理的配置变化。当在运行时配置变化发生的时候,默认情况下,这个Activity会被关掉并重启,但是用这个属性声明一个配置,就会阻止Activity被重启。相反,这个Activity会保持运行,并且它的onConfigurationChanged()方法会被调用。
下面中列出了这个属性的有效值,要设置多个值的时候,用“|”符号连接,例如:“locale|navigation|orientation”
    mcc -- IMSI移动国家编码改变时要进行自我处理---系统发现了一个新的SIM卡,并且更新了MCC。
    mnc -- IMSI移动网络编码改变时要进行自我处理---系统发现了一个新的SIM卡,并且更新了MNC
    locale -- 语言环境发生变化时要进行自我处理---用户选择了一种用于显示文本的新语言。
    touchscreen -- 触屏发生变化时要进行自我处理。(这种情况通常不会发生)
    keyboard -- 键盘类型发生变化时,要进行自我处理。例如用户插入了一个外部键盘
    keyboardHidden -- 键盘的可用性发生变化时,要进行自我处理。例如用户启用了硬件键盘。
    navigation -- 导航类型(轨迹球/方向板)发生变化时,要进行自我处理。这种情况通常不会发生。
    screenLayout -- 屏幕布局发生变化时,要进行自我处理。这可能是由被激活的不同的显示方式所导致的变化。
    fontScale -- 字体的缩放因子发生变化时,要进行自我处理。如用户选择了一个新的全局字体尺寸。
    uiMode -- 用户界面发生变化时,要进行自我处理。在把设备放入桌面/轿车内或夜间模式变化时,会导致这种情况发生。它在API级别8中被引入。
    orientation -- 屏幕的方向发生变化时,要进行自我处理。用户旋转设备时会发生这种变化。
    注意:如果应用程序的目标API级别是13或更高的版本,那么还应该声明screenSize配置,因为设备在横向和纵向之间切换时,对应的尺寸也会发生变化。
    screenSize -- 当前有效的屏幕尺寸发生变化时,要进行自我处理。这种变化意味着当前可用的相对长、宽比的尺寸发生了变化,因此当用户在横向和纵向之间切换时,就会产生屏幕可用尺寸的变化。但是,如果应用程序是在API级别12或更低的版本上编译的,那么Activity就要始终自己来处理这种变化(这个配置的变化不会重启Activity,即使是运行在Android3.2或更高版本的设备上)。
    smallestScreenSize -- 物理尺寸发生变化时,要进行自我处理。这种变化不关注屏幕方向的变化,只在实际的物理屏幕尺寸发生变化时才会发生,如切换到另一个显示器上的时候。这个变化对应smallestWidth属性的配置来进行改变。如果应用程序是在API级别12或更低的版本上编译的,那么Activity就要始终自己来处理这种变化(这个配置的变化不会重启Activity,即使是运行在Android3.2或更高版本的设备上)。

android:enabled
        这个属性用于设置Activity是否能够被系统实例化。如果设置为true,则可以被实例化,如果设置为false,则不能被实例化。默认值是true。
android:excledeFromRecents
        这属性用于设置由该Activity所启动的任务是否应该被排除在最近使用的应用程序列表之外。也就是说,当这个Activity是一个新任务的根节点时,这个属性决定了这个任务适应要显示在用户最近使用的应用程序列表中。如果设置为true,则这个任务会被排除在列表之外,如何设置为false,则应该包含在最近使用的应用列表中。默认值是false。
android:exported
        这个属性用于设置该Activity能否由另一个应用程序的组件来启动,如果设置为true,则可以启动,否则不能启动。如果设置为false,那么该Activity只能被同一个应用程序中的组件或带有相同用户ID的应用程序来启动。默认值是true。
android:finishOnTaskLaunch
        这个属性用于设置既存的Activity实例,在用户再次启动(在主屏上选择这个任务)它所属的任务时,是否应该被关闭。设置为true,则要关闭,否则不关闭,默认值是false。
android:hardwareAccelerated
        这个属性用于设置该Activity是否应该启用硬件加速渲染。如果设置为true,则启用硬件加速,否则不启用。默认设置是false。
android:icon
        图标
android:label
        标签

android:launchMode
            这个属性定义了应该如何启动Activity的一个指令。有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用来决定被调用Activity在处理Intent对象时应该发生的事情,这四种模式是:
    standard
    singleTop
    singleTask
    singleInstance
        默认的模式是standard。
        这四种模式被分成两组,standard和singleTop为一组,singleTask和singleInstance为一组。带有standard和singleTop启动模式的Activity能够被实例化多次。其实例能够属于任何任务,并且能够在Activity的堆栈中被定为。通常是调用startActivity()方法把它们加载到任务中(除非Intent对象包含了一个FLAG_ACTIVITY_NEW_TASK指令,这种情况下会选择启动一个新的任务。)
        相比之下,singleTask和singleInstance启动模式的Activity只能启动一个任务。它们始终是Activity堆栈的根节点。并且设备每次只能拥有一个这样的Activity---只有一个这样的任务。
        standard和singleTop模式彼此在一个方面有所不同:对于standard启动模式的Activity,每次要有一个新的Intent对象才能启动,系统会创建一个新的Activity类的实例来响应Intent对象的请求。每个实例处理一个Intent对象。同样,singleTop启动模式的Activity也会创建一个新的实例来处理一个新的Intent对象。但是,如果目标任务中在堆栈的顶部已经有了这个Activity的实例,那么这个实例会接受这个新的Intent对象(在onNewIntent()回调方法中调用);而不是创一个新的Activity实例。另一种情况,如:如果singleTop启动模式的Activity的一个实例,在目标任务中已经存在,但是它没有在任务堆栈的顶部,或者是在堆栈的顶部,却不是目标任务,那么就会创建一个新的Activity实例,并把它压入目标任务堆栈。
        singleTask和singleInstance模式彼此也在一个方面有所不同:singleTask模式的Activity,允许其他Activity作为它所在任务的一部分。它始终在所在任务的根节点,但是其他的Activity(需要是standard和singleTop模式的Activity)能够被加载到它的任务中。而singleInstance模式的Activity,不允许其他的Activity做它所在任务的一部分。它是其任务中唯一的Activity。如果要启动另外的Activity,那么被启动的Activity要关联到不同的任务中---就像是在Intent对象中设置了FLAG_ACTIVITY_NEW_TASK标记一样。

android:multiprocess
        这个属性用于设置Activity的实例能否被加载到与启动它的那个组件所在的进程中,如果设置为true,则可以,否则不可以。默认值是false。
通常,一个新的Activity实例会被加载到定义它的应用程序的进程中,以便应用程序的所有Activity都运行在同一个进程中。但是,如果这个属性被设置为true,那么这个Activity的实例就可以运行在多个进程中,允许系统在使用它们的进程中来创建实例(权限许可的情况下),这几乎是从来都不需要的事情。
android:name
        名字。 这个属性没有默认值,名称必须被指定。
android:noHistory
        这个属性用于设置在用户离开该Activity,并且它在屏幕上不再可见的时候,它是否应该从Activity的堆栈被删除。如果设置了true,则要删除,否则不删除。默认值是false。
android:permission
        这个属性用于设定启动Activity的客户端或者是响应一个Intent对象的请求所必须要有的权限。如果startActivity()方法或startActivityForResult()方法的调用者没有被授予指定的权限,那么它的Intent对象就不会发送给对应的Activity。
android:process
        这个属性用于设置Activity应该运行的那个进程的名字。通常,应用程序的所有组件都运行在为这个程序所创建的一个默认的进程中。它跟应用程序的包有相同的名字。<application>元素的process属性能够给所有的组件设置一个不同的默认值。但是每个组件都能够覆盖这个默认设置,允许把应用程序分离到多个进程中。
android:screenOrientation
        设置Activity在设备上显示的方向。
        属性值可以以下值:
        unspecified -- 默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。
        user -- 使用用户当前首选的方向。
        behind -- 使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。
        landscape -- 横向显示(宽度比高度要大)
        portrait -- 纵向显示(高度比宽度要大)
        reverseLandscape -- 与正常的横向方向相反显示,在API Level 9中被引入。
        reversePortrait -- 与正常的纵向方向相反显示,在API Level 9中被引入。
        sensorLandscape -- 横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
        sensorPortrait -- 纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
        sensor -- 显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。
        fullSensor -- 显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。
        nosensor -- 屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。
android:stateNotNeeded
        这个属性用于设置在没有保存Activity状态的情况下,它能否被销毁且成功的重
android:taskAffinity
        用于跟Activity有亲缘关系。默认情况下,在一个应用程序中的所有Activity都有相同的亲缘关系。能够通过设置这个属性把Activity分到不同的组中。甚至能够把定义在不同应用程序中的Activity放到同一个任务中。要指定一个跟任何任务没有亲缘关系的Activity,就要把这个属性设置为空字符串。
android:theme
        设定Activity整体主题,它会应用一个样式资源。
android:uiOptions
        设置Activity的UI的额外选项
android:windowSoftInputMode
        设定Activity的主窗口与软件键盘的窗口如何交互。

展开全部
12楼编辑于2019-07-23 09:10 未知归属地

PART5:application标签

语法:

<application android:allowTaskReparenting=['true' | 'false']
            android:backupAgent='string'
            android:debuggable=['true' | 'false']
            android:description='string resource'
            android:enabled=['true' | 'false']
            android:hasCode=['true' | 'false']
            android:hardwareAccelerated=['true' | 'false']
            android:icon='drawable resource'
            android:killAfterRestore=['true' | 'false']
            android:label='string resource'
            android:logo='drawable resource'
            android:manageSpaceActivity='string'
            android:name='string'
            android:permission='string'
            android:persistent=['true' | 'false']
            android:process='string'
            android:restoreAnyVersion=['true' | 'false']
            android:taskAffinity='string'
            android:theme='resource or theme'
            android:uiOptions=['none' | 'splitActionBarWhenNarrow'] >
   . . .
</application>

说明:
     应用程序的声明。它包含了每个应用程序组件所声明的子元素,并且还有能够影响所有组件的属性。
属性:
Android:allowTaskReparenting
     当一个与当前任务有亲缘关系的任务被带到前台时,用这个属性来指定应用程序中定义的Activity能否从他们当前的任务中转移到这个有亲缘关系的任务中。如果设置为true,则能够转移,如果设置为false,则应用程序中的Activity必须保留在它们所在的任务中。默认值是false。
用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)——“true”,表示能移动,“false”,表示它必须呆在启动时呆在的那个Task里。
      如果这个特性没有被设定,设定到<application>元素上的allowTaskReparenting特性的值会应用到Activity上。默认值为“false”。
一般来说,当Activity启动后,它就与启动它的Task关联,并且在那里耗尽它的整个生命周期。当当前的Task不再显示时,你可以使用这个特性来强制Activity移动到有着affinity的Task中。典型用法是:把一个应用程序的Activity移到另一个应用程序的主Task中。
例如,如果e-mail中包含一个web页的链接,点击它就会启动一个Activity来显示这个页面。这个Activity是由Browser应用程序定义的,但是,现在它作为e-mail Task的一部分。如果它重新宿主到Browser Task里,当Browser下一次进入到前台时,它就能被看见,并且,当e-mail Task再次进入前台时,就看不到它了。
      Actvity的affinity是由taskAffinity特性定义的。Task的affinity是通过读取根Activity的affinity决定。因此,根据定义,根Activity总是位于相同affinity的Task里。由于启动模式为“singleTask”和“singleInstance”的Activity只能位于Task的底部,因此,重新宿主只能限于“standard”和“singleTop”模式。

android:backupAgent
      用于定义应用程序备份代理的实现类的名称,这个类是BackupAgent类的一个子类。
android:debuggable
     指定应用程序是否能够被调试,即使是以用户模式运行在设备上的时候。如果设置为true,则能够被调试,否则不能调试,默认值是false。
android:description
    定义应用程序相关的用户可读文本。它的的值必须被设置成一个字符串资源的引用。跟label属性不一样,label属性可以使用原生的字符串。这个属性没有默认值。
android:enabled
    指定Android系统能否实例化应用程序组件。如果设置为true,这个可以实例化其组件,否则不能够实例化。 默认值是true。
android:hasCode
     设置应用程序是否包含了代码,如果设置为true,则包含代码,否则不包含任何代码。在这个属性被设置为false的时候,系统在加载组件的时候不会试图加载任何应用程序的代码。默认值是true。
android:hardwareAccelerated
     设置能够给应用程序中的所有Activity和View对象启用硬件加速渲染。如果设置为true,则应该启用,如果设置为false,则不会启用。默认值是false。
android:icon
     设置应用程序的整个图标,以及每个应用组件的默认图标。对于<activity>、<activity-alias>、<service>、<service>、<receiver>和<provider>元素,请看它们各自的icon属性。
android:killAfterRestore
      在整型系统重置操作中,当他的设置被重置后,应用是否应该被终止。单个包的重置操作不会引起应用被关闭。整个系统的恢复操作仅代表
性的发生一次,当电话第一次被设置时。第三方应用将不会经常使用此属性。
默认值为true,意思是,当整个系统被恢复时,应用运行玩他的数据后,将会终止。
android:label
      标签。
android:logo
      这个属性用于给整个应用程序设置一个Logo,而且它也是所有Activity的默认Logo。设置这个属性时,必须要引用一个包含图片的可绘制资源(如:“@drawable/logo”)。没有默认的Logo。
android:manageSpaceActivity
      定义了一个完整的Activity子类的名字,系统能够把这个名字加载到由用户管理被应用程序所占用的设备上的内存。这个Activity也应该用<activity>元素来声明。
android:name
      这整个属性用完整的Java类名,给应用程序定义了一个Application子类的实现。当应用程序进程被启动时,这个类在其他任何应用程序组件被实例化之前实例化。
      这个子类实现是可选的,大多数应用程序不需要一个子类的实现。如果没有实现自己的子类,Android系统会使用基本的Application类的一个实例。
android:permission
      这个属性定义了一个权限,为了跟应用程序进行交互,客户端必须要有这个权限。这个属性是为给所有的应用程序组件设置权限提供了便利的方法。它能够被独立组件所设置的permission属性所覆盖。
android:persistent
     这个属性用户设置应用程序是否应该时刻保持运行状态,如果设置为true,那么就保持,否则不保持。默认值是false。普通的应用程序不应该设置这个属性,持久运行模式仅用于某些系统级的应用程序。
android:process
     这个属性用于定义一个进程名称,应用程序的所有组件都应该运行在这个进程中。每个组件都能够用它自己process属性的设置来覆盖这个<application>元素中的设置。
     默认情况下,当应用程序的第一个组件需要运行时,Android系统就会给这个应用程序创建一个进程。然后,应用中的所有组件都运行在这个进程中。默认的进程名是跟<manifest>元素中设置的包名进行匹配的。
     通过设置这个属性,能够跟另外一个应用程序共享一个进程名,能够把这两个应用程序中的组件都安排到同一个进程中运行---但是仅限于这两个应用程序共享一个用户ID,并且带有相同的数字证书。
    如果这个进程名称用“:”开头,那么在需要的时候,就会给应用程序创建一个新的、私有的进程。如果进程名用小写字符开头,就会用这个名字创建一个全局的进程,这个全局的进程能够被其他应用程序共享,从而减少资源的使用。
android:restoreAnyVersion
      设置这个属性表示应用程序准备尝试恢复任何备份的数据集,即使备份比设备上当前安装的应用程序的版本要新。这个属性设置为true,即使是在版本不匹配而产生数据兼容性提示的时候,也会允许备份管理来恢复备份的数据,所以要谨慎使用。
这个属性的默认值是false。
android:taskAffinity
      这个属性给应用的所有的Activity设置了一个亲缘关系名,除了那些用它们自己的taskAffinity属性设置不同亲缘关系的组件。
默认情况下,应用程序中的所有Activity都会共享相同的亲缘关系,亲缘关系的名称跟由<manifest>元素设置的包名相同。
android:theme
      这个属性给应用程序中所有的Activity设置默认的主题,属性值要引用一个样式资源。每个独立的Activity的主题会被它们自己的theme属性所覆盖。
android:uiOptions
      这个属性设置了Activity的UI的额外选项。
参考:
01, Android的Task和Activity相关

展开全部
11楼编辑于2019-07-23 08:06 未知归属地

PART4:uses-sdk标签

语法:
<uses-sdk android:minSdkVersion='integer'
         android:targetSdkVersion='integer'
         android:maxSdkVersion='integer' />
说明:
   定义APK能够运行的版本。
属性:
android:minSdkVersion
   能够运行APK的最小sdk版本。如果没有设定的话,默认是1。
android:targetSdkVersion
   指定了运行APK的目标的API级别。如果没有设定的话,默认等于minSdkVersion。
android:maxSdkVersion
   能够运行APK的最大sdk版本。
  不推荐声明这个属性,首先,没有必要设置这个属性是因为,这样会阻止该应用程序在新发布的Android平台版本上运行。通过设计,新的平台版本时完全向后兼容的。该应用程序应该在升级后的平台上能够正常运行。其二,要注意的是,在某些情况中,声明这个属性在用户设备的系统升级较高的API Level之后,能够导致该应用程序被删除。大多数应用所在的设备都会定期的接到在线升级的请求,因此在设置这个属性之前,要仔细考虑该属性给应用程序所带来的影响。

10楼编辑于2019-07-23 08:00 未知归属地

PART3:instrumentation标签

语法:
<instrumentation android:functionalTest=['true' | 'false']
                android:handleProfiling=['true' | 'false']
                android:icon='drawable resource'
                android:label='string resource'
                android:name='string'
                android:targetPackage='string'/>
说明:
       这个元素声明了一个Instrumentation类,这个类能够监视应用程序跟系统的交互。Instrumentation对象会在应用的其他所有组件被实例化之前实例化。
它的主要作用是用于进行单元测试。
属性:
android:functionalTest
       这个属性用于指定Instrumentation类是否应该作为一个功能性的测试来运行,如果设置为true,这要运行,否则不应该运行。默认值是false。
android:handleProfiling
        这个属性用于指定Instrumentation对象是否会开启和关闭分析功能。如果设置为true,那么由Instrumentation对象来决定分析功能的启动和终止时机,如果设置为false,则分析功能会持续到Instrumentation对象整个运行周期。如果设置为true,会使Instrumentation对象针对一组特定的操作来进行分析。默认值是false。
android:icon
       这个属性用于给Instrumentation类设置一个图标。它必须要应用一个可绘制的资源。
android:label
       这个属性用于给Instrumentation类设置一个用户可读的标签。这个标签可用原生字符串,也可以引用一个字符串资源。
android:name
       这个属性用于设定Instrumentation子类的名称。应该是完整的Java类名(如:com.example.project.StringInstrumentation)。但是,也可以用简写方式(如:.StringInstrumentation),它的包名会使用<manifest>元素的package属性中指定的包名。 它没有默认值,必须被指定。
android:targetPackage
       这个属性用于指定Instrumenttation对象所监视的应用程序。由包名所标识的应用程序会跟清单的<manifest>元素的package属性值相关联。

展开全部
9楼编辑于2019-07-17 07:48 未知归属地
共2页
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。