网站移动端是什么情况,哪个网站做货车专业,淘客单网站,网络管理系统正常运行的前提必须是我们在进行APP开发的时候都会遇到一个文件#xff1a;AndroidManifest.xml。从刚开始进行Android开发#xff0c;到现在已经过去了几个月#xff0c;还是对这个文件一知半解#xff0c;只知道它是配置用的。但是这文件里的东西具体有什么用#xff0c;该怎么用一直都没有理…我们在进行APP开发的时候都会遇到一个文件AndroidManifest.xml。从刚开始进行Android开发到现在已经过去了几个月还是对这个文件一知半解只知道它是配置用的。但是这文件里的东西具体有什么用该怎么用一直都没有理解。借着做项目的机会仔细研究一下这个文件。
研究AndroidManifest.xml最好的方式自然就是对照着官方文档详细理解项目中每个字段的作用并且做出一些修改来验证。
AndroidManifest是什么?
AndroidManifest官方解释是应用清单manifest意思是货单每个应用的根目录中都必须包含一个并且文件名必须一模一样。这个文件中包含了APP的配置信息系统需要根据里面的内容运行APP的代码显示界面。
AndroidManifest的作用是什么
上述的功能是非常笼统的解释具体到细节就是
为应用的 Java 软件包命名。软件包名称充当应用的唯一标识符。描述应用的各个组件包括构成应用的 Activity、服务、广播接收器和内容提供程序。它还为实现每个组件的类命名并发布其功能例如它们可以处理的 Intent 消息。这些声明向 Android 系统告知有关组件以及可以启动这些组件的条件的信息。确定托管应用组件的进程。声明应用必须具备哪些权限才能访问 API 中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限列出 Instrumentation类这些类可在应用运行时提供分析和其他信息。这些声明只会在应用处于开发阶段时出现在清单中在应用发布之前将移除。声明应用所需的最低 Android API 级别列出应用必须链接到的库
上面是官方的解释。很多东西笔者现在还不能理解也没有用到先挑笔者理解的进行解释。 第一条提供软件包名。这就是我们的apk的名字通常我们的名字都是类似com.android.gles3jni这种和Java类名类似目的是确定使其成为一个唯一值。 第二条描述应用的各个组件。这是用来定义四大组件用的。我们最常用的就是Activity组件。它需要定义组件的表现形式组件名、主题、启动类型组件可以响应的操作例如某个启动意图等。 第三条、第四条和第五条还没用到不做解释。 第五条声明最低API级别。这个级别在build.gradle文件中也能定义字段是minSdkVersion。在AndroidManifest.xml文件中定义的情况比较少。 第六条列出必要的lib库。这东西在3.0以后的Android Studio似乎也没什么功能因为在3.0以后编译用的是CMakeLists.txt文件以及build.gradle文件来指定库。
一份真实的AndroidManifest.xml文件 manifest xmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.sample.teapotandroid:versionCode1android:versionName1.0.0.1 uses-feature android:glEsVersion0x00020000/uses-featureapplicationandroid:allowBackupfalseandroid:fullBackupContentfalseandroid:supportsRtltrueandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:themestyle/AppThemeandroid:namecom.sample.teapot.TeapotApplication!-- Our activity is the built-in NativeActivity framework class.This will take care of integrating with our NDK code. --activity android:namecom.sample.teapot.TeapotNativeActivityandroid:labelstring/app_nameandroid:configChangesorientation|keyboardHidden!-- Tell NativeActivity the name of our .so --meta-data android:nameandroid.app.lib_nameandroid:valueTeapotNativeActivity /intent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter/activity/application
/manifest这是Google官方示例中的teapots项目中的一个文件我们就针对这份文件来分析字段的意义。字段的意义参考的是官方文档。
manifest元素
首先所有的xml都必须包含manifest元素。这是文件的根节点。它必须要包含application元素并且指明xmlns:android和package属性。
manifest元素中的属性
xmlns:android
这个属性定义了Android命名空间。必须设置成http://schemas.android.com/apk/res/android。不要手动修改。
package
这是一个完整的Java语言风格包名。包名由英文字母大小写均可、数字和下划线组成。每个独立的名字必须以字母开头。
构建APK的时候构建系统使用这个属性来做两件事
1、生成R.java类时用这个名字作为命名空间用于访问APP的资源 比如package被设置成com.sample.teapot那么生成的R类就是com.sample.teapot.R2、用来生成在manifest文件中定义的类的完整类名。比如package被设置成com.sample.teapot并且activity元素被声明成activity android:name.MainActivity完整的类名就是com.sample.teapot.MainActivity。
包名也代表着唯一的application ID用来发布应用。但是要注意的一点是在APK构建过程的最后一步package名会被build.gradle文件中的applicationId属性取代。如果这两个属性值一样那么万事大吉如果不一样那就要小心了。
android:versionCode
内部的版本号。用来表明哪个版本更新。这个数字不会显示给用户。显示给用户的是versionName。这个数字必须是整数。不能用16进制也就是说不接受0x1这种参数
android:versionName
显示给用户看的版本号。 manifest元素中的元素
uses-feature元素
Google Play利用这个元素的值从不符合应用需要的设备上将应用过滤。
这东西的作用是将APP所依赖的硬件或者软件条件告诉别人。它说明了APP的哪些功能可以随设备的变化而变化。
使用的时候要注意必须在单独的uses-feature元素中指定每个功能如果要多个功能需要多个uses-feture元素。比如要求设备同时具有蓝牙和相机功能 uses-feature android:nameandroid.hardware.bluetooth /
uses-feature android:nameandroid.hardware.camera /uses-feature的属性
android:name
该属性以字符串形式指定了APP要用的硬件或软件功能。
android:required
这项属性如果值为true表示需要这项功能否则应用无法工作如果为false表示应用在必要时会使用该功能但是如果没有此功能应用也能工作。
android:glEsVersion
指明应用需要的Opengl ES版本。高16位表示主版本号低16位表示次版本号。例如如果是要3.2的版本就是0x00030002。如果定义多个glEsVersion应用会自动启用最高的设置。
application元素
此元素描述了应用的配置。这是一个必备的元素它包含了很多子元素来描述应用的组件它的属性影响到所有的子组件。许多属性例如icon、label、permission、process、taskAffinity和allowTaskReparenting都可以设置成默认值。
application的属性
android:allowBackup
表示是否允许APP加入到备份还原的结构中。如果设置成false那么应用就不会备份还原。默认值为true。
android:fullBackupContent
这个属性指向了一个xml文件该文件中包含了在进行自动备份时的完全备份规则。这些规则定义了哪些文件需要备份。此属性是一个可选属性。默认情况下自动备份包含了大部分app文件。
android:supportsRtl
声明你的APP是否支持RTLRight To Left布局。如果设置成true并且targetSdkVersion被设置成17或更高。很多RTL API会被集火这样你的应用就可以显示RTL布局了。如果设置成false或者targetSdkVersion被设置成16或更低。哪些RTL API就不起作用了。
该属性的默认的值是false。
android:icon
APP的图标以及每个组件的默认图标。可以在组价中自定义图标。这个属性必须设置成一个引用指向一个可绘制的资源这个资源必须包含图片。系统不设置默认图标。例如mipmap/ic_launcher引用的就是下面的资源 android:label
一个用户可读的标签以及所有组件的默认标签。子组件可以用他们的label属性定义自己的标签如果没有定义那么就用这个标签。
标签必须设置成一个字符串资源的引用。这样它们就能和其他东西一样被定位比如string/app_name。当然为了开发方便你也可以定义一个原始字符串。 android:theme
该属性定义了应用使用的主题的它是一个指向style资源的引用。各个activity也可以用自己的theme属性设置自己的主题。 android:name
Application子类的全名。包括前面的路径。例如com.sample.teapot.TeapotApplication。当应用启动时这个类的实例被第一个创建。这个属性是可选的大多数APP都不需要这个属性。在没有这个属性的时候Android会启动一个Application类的实例。
activity元素
该元素声明一个实现应用可视化界面的ActivityActivity类子类。这是application元素中必要的子元素。所有Activity都必须由清单文件中的activity元素表示。任何未在该处声明的Activity对系统都不可见并且永远不会被执行。
android:name
Activity类的名称是Activity类的子类。该属性值为完全限定类名称例如com.sample.teapot.TeapotNativeActivity。为了方便起见如果第一个字符是点.就需要加上manifest元素中的包名。应用一旦发布不应更改该名称。
没有默认值必须指定该名称。
android:label
Activity标签可以被用户读取。该标签会在Activity激活时显示在屏幕上。如果未设置用application中的label属性。对属性的设置要求和application中一样。
android:configChanges
列出 Activity 将自行处理的配置更改消息。在运行时发生配置更改时默认情况下会关闭 Activity 然后将其重新启动但使用该属性声明配置将阻止 Activity 重新启动。 Activity 反而会保持运行状态并且系统会调用其 onConfigurationChanged()方法。 注应避免使用该属性并且只应在万不得已的情况下使用。 如需了解有关如何正确处理配置更改所致重新启动的详细信息请阅读处理运行时变更。 这属性可以设置的项很多这里列出常用的项
orientation 屏幕放心啊发生了变化比如用户旋转了设备keyboardHidden 键盘无障碍功能发生了变化比如用户显示了硬件键盘android:launchMode 关于如何启动Activity的指令。一共有四种指令 “standard” “singleTop” “singleTask” “singleInstance” 默认情况下是standard。这些模式被分为两大类standard和singleTop是一类。该模式的Activity可以多次实例化。实例可属于任何任务并且可以位于Activity堆栈中的任何位置。singleTask和singleInstance是一类。该模式只能启动任务它们始终位于Activity堆栈的根位置。此外设备一次只能保留一个Activity实例。 设置成singleTask后系统在新任务的根位置创建Activity并向其传送Intent。如果已经存在一个Activity实例则系统会通过调用该实例的onNewIntent()方法向其传送Intent而不是创建一个新的Activity实例。
android:theme
设定主题格式与application中的theme类似。
meta-data元素
指定额外的数据项该数据项是一个name-value对提供给其父组件。这些数据会组成一个Bundle对象可以由PackageItemInfo.metaData字段使用。虽然可以使用多个meta-data元素标签但是不推荐这么使用。如果有多个数据项要指定推荐做法是将多个数据项合并成一个资源然后使用一个meta-data包含进去。
该元素有三个属性
android:name
数据项名称这是一个唯一值。
android:resource
一个资源的引用。
android:value
数据项的值。
intent-filter元素
指明这个activity可以以什么样的意图(intent)启动。该元素有几个子元素可以包含。我们先介绍遇到的这两个
action元素
表示activity作为一个什么动作启动android.intent.action.MAIN表示作为主activity启动。
category元素
这是action元素的额外类别信息android.intent.category.LAUNCHER表示这个activity为当前应用程序优先级最高的Activity。
总结
至此所有的元素信息已经分析完毕如有错误欢迎各位读者指正。后面再遇到什么元素会继续往里面添加。