AndroidManifest.xml 文件详解

AndroidManifest官方解释是应用清单,每个应用的根目录中都必须包含一个,这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面。


标签介绍

1.  manifest

这是文件的根节点。它必须要包含<application>元素,并且指明xmlns:androidpackage属性。

manifest标签 属性介绍:

  • xmlns:android (必填,该属性定义了Android命名空间,必须设置成http://schemas.android.com/apk/res/android 不用修改)
  • package (必填,该属性定义app包名,通常这里会填但是我们通常会在gradle里面定义包里,如果gradle里面填了这里会被覆盖,-> app -> build.gradle -> defaultConfig.applicationId = 包名)
  • android:versionCode  (内部版本号。用来表示哪个版本更新,这个数字不会显示给用户,显示给用户的是versionName。这个数字必须是整数。不能用16进制,通常也会在 gradle 里面配置 -> app -> build.gradle -> defaultConfig.versionCode)
  • android:versionName (显示给用户看的版本号,通常也会在 gradle 里面配置 -> app -> build.gradle -> defaultConfig.versionName)


2. uses-feature

这个标签通常我们不会配置,所以这里就不做过多解释

这东西的作用是将APP所依赖的硬件或者软件条件告诉别人。它说明了APP的哪些功能可以随设备的变化而变化。

使用的时候要注意,必须在单独的<uses-feature>元素中指定每个功能,如果要多个功能,需要多个<uses-feture>元素。比如要求设备同时具有蓝牙和相机功能:

<uses-feature android:name="android.hardware.bluetooth" />
<uses-feature android:name="android.hardware.camera" />复制代码


3. application

该标签描述了应用配置。这是一个必备的元素。

application 属性介绍:

  • android:allowBackup (表示是否允许APP加入到备份还原的结构中。如果设置成false,那么应用就不会备份还原。默认值为true。)
  • android:fullBackupContent (这个属性指向了一个xml文件,该文件中包含了在进行自动备份时的完全备份规则。这些规则定义了哪些文件需要备份。此属性是一个可选属性。默认情况下,自动备份包含了大部分app文件。 通过不填)
  • android:supportsRtl  (声明你的APP是否支持RTL(Right To Left)布局。如果设置成true,并且targetSdkVersion被设置成17或更高。很多RTL API会被集火,这样你的应用就可以显示RTL布局了。如果设置成false或者targetSdkVersion被设置成16或更低。哪些RTL API就不起作用了。该属性默认的值是false)
  • android:icon  (app的logo,用户下载包的时候看到的那个logo,该属性必须设置成一个引用,指向一个可图片的资源 比如:@mipmap/logo)
  • android:label  (app的包名,用户下载包的时候看到的那个包名,该属性同上,设成一个字符串资源引用。比如:@string/app_name)
  • android:theme  (该属性定义了应用使用的主题的,它是一个指向style资源的引用。各个activity也可以用自己的theme属性设置自己的主题)
  • android:name  (指定哪一个类的实例被第一个创建。例如 com.quzou.app.App,如果manifest->package指定了包名也是com.quzou.app 那这里可以直接填 .App。当应用启动时,这个属性是可选的,大多数APP都不需要这个属性。在没有这个属性的时候,Android会启动一个Application类的实例.)
  • android:roundIcon  (这是一个只适用在Android 7.1系统上的过渡版本,很快就被8.0系统的应用图标适配所替代了,我们不用去管它。)
  • tools:replace  (一般解决合并出错)


4. activity

该元素声明一个实现应用可视化界面的Activity(Activity类子类)。这是<application>元素中必要的子元素。所有Activity都必须由清单文件中的<activity>元素表示。任何未在该处声明的Activity对系统都不可见,并且永远不会被执行。

activity 标签属性介绍:

  • android:name  (Activity类的名称,如果上面配置过package 这里可以直接 .SplashActivity )
  • android:label  (类似于html里面的title, 如果这里未设置,会用<application>中的label属性)
  • android:theme  (设定主题格式,与<application>中的theme类似)
  • android:configChanges  (列出 Activity 将自行处理的配置更改消息。在运行时发生配置更改时,默认情况下会关闭 Activity 然后将其重新启动,但使用该属性声明配置将阻止 Activity 重新启动。 Activity 反而会保持运行状态,并且系统会调用其 onConfigurationChanged()方法。)
  • android:launchMode  (这个是Activity的启动模式,有四种:standard、singleTop、singleTask和singleInstance。)
standard (标准模式)也是系统默认模式 只要启动一次Activity,系统就会在当前任务栈新建一个实例 
singleTop (栈顶复用模式)  1.当前栈中已有该Activity的实例并且该实例位于栈顶时,不会创建实例,而是复用栈顶的实例,并且会将Intent对象传入,回调onNewInten()方法            
                2.当前栈中已有该Activity的实例但是该实例不在栈顶时,其行为和standard启动模式一样,依然会创建一个新的实例            
                3.当前栈中不存在该Activity的实例时,其行为同standard启动模式
singleTask  (站内复用模式)  在复用的时候,首先会根据taskAffinity去找对应的任务栈
                1、如果不存在指定的任务栈,系统会新建对应的任务栈,并新建Activity实例压入栈中
                2、如果存在指定的任务栈,则会查找该任务栈中是否存在该Activity实例a、如果不存在该实例,则会在该任务栈中新建Activity实例
                b、如果存在该实例,则会直接引用,并且回调该实例的onNewIntent()方法。并且任务栈中该实例之上的Activity会被全部销毁。

singleInstance (单实例模式) 启动该模式Activity的时候,会查找系统中是否存在
                1、不存在,首先会新建一个任务栈,其次创建该Activity实例
                2、存在,则会直接引用该实例,并且回调onNewIntent()方法。 
                特殊情况:该任务栈或该实例被销毁,系统会重新创建。
复制代码
  • android:screenOrientation  (用于控制activity启动方向)
unspecified,默认值,由系统决定,不同手机可能不一致
landscape,强制横屏显示
portrait,强制竖屏显
behind,与前一个activity方向相同
sensor,根据物理传感器方向转动,用户90度、180度、270度旋转手机方向,activity都更着变化
sensorLandscape,横屏旋转,一般横屏游戏会这样设置
sensorPortrait,竖屏旋转
nosensor,旋转设备时候,界面不会跟着旋转。初始化界面方向由系统控制
user,用户当前设置的方向复制代码
  • android:windowSoftInputMode  (用于控制弹出软键盘形式)

stateUnspecified   软键盘的状态 (是否它是隐藏或可见 )没有被指定。系统将选择一个合适的状态或依赖于主题的设置
stateUnchanged     软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时
stateHidden        当用户选择该 Activity时,软键盘被隐藏——也就是,当用户确定导航到该 Activity时,而不是返回到它由于离开另一个 Activity
stateAlwaysHidden  软键盘总是被隐藏的,当该 Activity主窗口获取焦点时
stateVisible       软键盘是可见的,当那个是正常合适的时 (当用户导航到 Activity主窗口时 )
stateAlwaysVisible 当用户选择这个 Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该 Activity时,而不是返回到它由于离开另一个 Activity
adjustUnspecified  它不被指定是否该 Activity主 窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局 视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为 设置
adjustResize       该 Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间
adjustPan          该 Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作
复制代码


4.1 intent-filter

指明这个activity可以以什么样的意图(intent)启动。该元素有几个子元素可以包含。我们先介绍遇到的这两个


4.1.1 action

表示activity作为一个什么动作启动,android.intent.action.MAIN表示作为主activity启动。

4.1.2 category

这是action元素的额外类别信息,android.intent.category.LAUNCHER表示这个activity为当前应用程序优先级最高的Activity。

5. meta-data

指定额外的数据项,该数据项是一个name-value对,提供给其父组件。这些数据会组成一个Bundle对象,可以由PackageItemInfo.metaData字段使用。虽然可以使用多个<meta-data>元素标签,但是不推荐这么使用。如果有多个数据项要指定,推荐做法是:将多个数据项合并成一个资源,然后使用一个<meta-data>包含进去

meta-data 属性介绍:

  • android:name  (数据项名称,这是一个唯一值)
  • android:resource  (一个资源引用)
  • android:value  (数据项的值)






转载于:https://juejin.im/post/5cd8df836fb9a03232199c1b

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值