Manifest清单文件

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

清单文件中的标签

  • <action>:向意图过滤器添加操作。
  • <activity>:声明一个活动组件。
  • <activity-alias>:声明活动的别名。
  • <application>:申请的声明。
  • <category>:将类别名称添加到intent过滤器。
  • <compatible-screens>:指定与应用程序兼容的每个屏幕配置。
  • <data>:将数据规范添加到intent过滤器。
  • <grant-uri-permission>:指定父内容提供者有权访问的应用程序数据的子集。
  • <instrumentation>:声明一个Instrumentation类,使您可以监视应用程序与系统的交互。
  • <intent-filter>:指定活动,服务或广播接收器可以响应的意图类型。
  • <manifest>:AndroidManifest.xml文件的根元素。
  • <meta-data>:可以提供给父组件的其他任意数据项的名称 - 值对。
  • <path-permission>:定义内容提供程序中特定数据子集的路径和所需权限。
  • <permission>:声明一个安全权限,可用于限制对此应用程序或其他应用程序的特定组件或功能的访问。
  • <permission-group>:声明相关权限的逻辑分组的名称。
  • <permission-tree>:声明权限树的基本名称。
  • <provider>:声明内容提供程序组件。
  • <receiver>:声明广播接收器组件。
  • <service>:声明服务组件。
  • <supports-gl-textture>:声明应用程序支持的单个GL纹理压缩格式。
  • <supports-screens>:声明您的应用支持的屏幕尺寸,并为大于您的应用支持的屏幕启用屏幕兼容模式。
  • <uses-configuration>:表示应用程序所需的特定输入功能。
  • <uses-feature>:声明应用程序使用的单个硬件或软件功能。
  • <uses-library>:指定应用程序必须链接的共享库。
  • <uses-permission>:指定用户必须授予的系统权限才能使应用程序正常运行。
  • <uses-permission-sdk-23>:指定应用程序需要特定权限,但前提是该应用程序安装在运行Android 6.0(API级别23)或更高版本的设备上。
  • <uses-sdk>:允许您通过API级别整数表达应用程序与Android平台的一个或多个版本的兼容性。

具体标签

  • <activity>中的标签
      (1).android:screenOrientation="",这个属性控制Activity启动时候的方向,可取值为:landscape(横屏显示)、portrait(竖屏显示)、unspecified(系统默认显示)、user(用户当前的首选方向)、behind(与当前堆栈下面的Activity同向)、sensor(根据传感器决定)、nosensor(忽略传感器,系统根据unspecified显示);有些时候,改变Activity的配置可能会使Activity重启动(默认情况下会重启),如果不想重新启动就需要配置configChanges属性,就不会重启而是调用onConfigurationChanged(Configuration newConfig)这个方法;
  • service标签

清单文件中的注意事项

  • android:process属性:

      一般情况下,一个应用的所有组件都运行在系统为这个应用所创建的进程中,这个默认进程是用这个应用的包名来命名的。
      android:process属性在application标签和四大组件中都可以声明,可以让你的应用跨进程运行。如果设置的属性值是以一个冒号":"开头的,冒号":"这个前缀将把属性值附加到你的包所运行的标准进程名字的后面作为新的进程名称,这个新的进程对于这个应用来说是私有的。如果设置的属性值是以小写字母开头的,则这个服务将运行在一个以这个名字命名的全局的进程中,当然前提是它需要有相应的权限,这将会让不同的应用中的各种组件可以共享一个进程,减少资源的占用。但是我们一般使用在service中,所以在此以service举例。
      在一般情况下,一个service服务是没有自己独立的进程的,一般是作为一个线程运行在它所在的应用的进程中。不过,我们可以在service标签下设置android:process属性为service指定进程。一言以蔽之,就是我们可以通过android:process属性让service(application和四大组件都可以)创建并运行于我们指定的进程中。
      如果我们需要让一个service服务在一个远端进程中运行(而不是按照标准在它所在的apk的进程中运行),我们可以在清单文件中的这个service的标签中通过android:process属性为其指定一个进程,比如android:process=":remote"。这个remote名字是可以随意起的,也可以使用其他字符串。
      比如应用包名为"com.mocking.example",那么新的进程名字则为"com.mocking.example:remote"。如果你把android:process属性设置为":lalala",那么新的进程名字则为"com.mocking.example:lalala"。如果你把android:process属性设置为"com.yoyo.example",那么新的进程名则为"com.yoyo.example"。

  • screenOrientation属性和configChanges属性

    android:screenOrientation=""和android:configChanges=""属性不需要一起使用;

    当使用了configChanges属性时,是告诉系统在activity重建时,app会调用activity的onConfigurationChanged函数(如果重写了并且在manifest清单文件中加入了CHANGE_CONFIGURATION权限的话)。

    screenOrientation属性是告诉系统,activity不会改变方向。
    在只写了screenOrientation属性,没有写configChanges属性时,屏幕不会翻转,activity永远不会重建,就当屏幕翻转没发生一样;
    在添加configChanges的情况下, 首先, onConfigurationChanged并不会被调用到, 也就是说这部分代码是无用的, 第二, 在普通的屏幕翻转的情况, 由于screenOrientation的作用, activity不会被重建也不会被翻转. 这里没有问题. 第三, 当前activit A打开另外一个activity B, B将屏幕设置为横屏时, 虽然不会导致A的重建, 但会导致A的界面重新排布, 这时有可能会出一些奇怪的bug, 比如获取到的View还是横屏的大小, 然后按照这个大小进行绘制, 回到竖屏时就错误了.
    所以,只需要设置screenOrientation属性就可以了;

    在4.0之前设置configChanges="keyboardHidden|orientation"就行了,但是4.0之后,就需要设置成configChanges="keyboardHidden|orientation|screenSize";

  • exported:
      这个属性在四大组件中都有,属性值为true和false。当属性值为true时,代表可以被其他应用引用,属性值为false时,代表只可以在本应用内调用。这个属性值的默认值与<intent-filter>有关,如果组件内含有<intent-filter>标签,则exported默认为true,如果没有<intent-filter>标签,则默认值为false。

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
--------------------last line for now--------------------