xmlns:android属性——定义命名空间
这个属性定义了这个XML文件所使用的命名空间。如果需要指定特殊的命名空间,就需要手动编写代码,在Android Studio基本格式如下:
xmlns:<命名空间标识>="http://schemas.android.com/apk/res-auto"
package属性——应用程序的唯一标识
要是我安装另一个有相同package属性的应用程序,会有什么事情发生呢?会提示如下错误:
Failure[INSTALL_FAILED_ALREADY_EXSIST]
注意:除非特殊需要,否则不建议修改package属性的值!原因是package是唯一标识了
我们应用程序的属性,如果你试图改变它的值,那么系统通常会认为这是一个不同的
应用程序,会导致拥有前一版本应用程序的用户无法拥有新版本的应用程序。
android:sharedUserId属性——共享数据
该属性定义了需要和其他应用程序共享的Linux用户ID。
默认情况下,Android系统为每一个应用程序分配一个唯一的用户ID。然而,
当这个属性在多个应用程序中被设置为相同值的时候,它们将共享一个用户ID。
这样做的好处是,它们之间可以相互访问彼此的数据,如有需要,它们还将在相同的
进程中运行。应用没有设置这个属性,这就意味着它没有和别的应用程序存在共享关系,
这样它们之间就需要通过其他手段(如进程间通信)实现数据互访。
与android:sharedUserId属性相关的属性还有android:sharedUserLabel,
这个属性给共享的用户ID定义了一个用户可读的标签。这个标签必须用字符串资源来设置,
不能使用原生的字符串。这个属性在API LEVEL3中引用,只有设置了sharedUserId属性时才有意义。
android:versionCode属性——内部版本号
versionCode属性的值是一个内部版本号,用于确定这个版本是否比另一个版本更新,
数字越大表明它就越新。它不是显示给用户看的版本号,而是由versionName属性设置的号码。
版本号将决定一些服务的行为,比如替换应用程序时是否执行备份还原操作等。
该号码必须设为整数,递增的!
android:versionName属性——显示给用户的版本号
versionName属性的值是显示给用户的版本号,它可以被设置为一个原始字符串
或者一个字符串资源的引用。这个字符串除了要显示给用户外,没有其他的目的。
如版本号为1.1.0
android:installLocation属性——安装位置
该属性定义了应用程序默认的安装位置,共有3个可选值,其形式如下:
android:installLocation=["auto"|"internalOnly"|"preferExternal"]
下表说明了这3个可选值的含义。
值 | 描述 |
auto |
应用程序可能被安装到外部存储设备中,但默认情况下系统将会把应用程序安装到内部存储设备中。 如果内存不足,那么系统将会把应用程序安装到外部存储设备中。 |
internalOnly |
应用程序必须安装到设备的内部存储设备中。如果设置了这个值,那意味着应用程序将永远不会安装 到外部存储设备中去。如果内存不足,那么系统将不会安装这个APK。在没有 设置android:installLocation属性的情况下,internalOnly是该属性的默认值。 |
preferExternal |
应用程序将会被安装到外部存储设备中,如果系统不支持外部存储设备或者外部设备已满, 那么系统将会把这个应用程序安装到内部存储设备中。 |
<uses-permission>——应用程序的权限申请
该属性为用户权限,应用使用中如果没有相应的权限,就无法创建文件,
而程序并没有显示一个异常的提示,这时我们就可能要花费大量的时间去找问题的根源。
建议开发之前仔细分析需求,分析应用为什么功能,而这些动能是否需要权限才可以访问。
<permission>节点——自定义应用程序的访问权限
定义自己的权限,用来限制对本应用程序或其他应用程序的特殊组件或功能访问
手动向AndroidManifest.xml文件中添加一个<permission>节点,它只能包含在<manifest>节点下,
语法如下所示:
<permission android:description="string resource" android:icon="drawable resource" android:logo="drawable resource" android:label="string resource" android:name="string" android:permissionGroup="string" android:protectionLevel=["normal"|"dangerous"|"signature"|"signatureOrSystem"]/>
3个属性:
①android:name:声明权限的名称。这个名称必须是唯一的,因此,应该使用Java风格的命名,
比如com.test.permission.TEST。
②android:permissionGroup:声明权限从属于哪一个权限组,这个权限组可以是Android预编译的,
也可以是自定义的。下表列除了Android系统预编译的系统权限组。
权限组名称 | 描述 |
android.permission-group.ACCOUNTS | 用于直接访问由帐号管理器管理的帐号 |
android.permission-group.COST_MONEY | 用于使用户不需要直接参与就可花钱的权限 |
android.permission-group.DEVELOPMENT_TOOLS | 与开发特征相关的权限群 |
android.permission-group.HARDWARE_CONTROLS | 用于提供直接访问设备硬件的权限 |
android.permission-group.LOCATION | 用于允许用户访问用户当前位置的权限 |
android.permission-group.MESSAGES |
用于允许应用程序以用户的名义发送信息或者 拦截用户收到的信息的权限 |
android.permission-group.NETWORK | 适用于提供网络服务的访问权限 |
android.permission-group.PERSONAL_INFO |
适用于提供访问到用户私人数据的权限, 如联系人,日历事件和电子邮件信息 |
android.permission-group.PHONE_CALLS |
适用于关联访问和修改电话状态的权限, 比如拦截去电,读取和修改电话的状态 |
android.permission-group.STORAGE | 与SD卡访问有关的权限组 |
android.permission-group.SYSTEM_TOOLS | 与系统API有关的权限组 |
③android:protectionLevel:描述了隐含在权限中的潜在风险,该属性的值可以是下表中的一个字符串。
值 | 意义 |
normal |
默认值。低风险的权限,它可以使请求的应用程序访问孤立的应用程序级的功能, 给其他应用程序,系统或者用户带来最小的风险。系统在安装时,会自动授予 这种类型的权限给请求的应用程序,无须用户明确声明。 |
dangerous |
高风险权限,它将事请求的应用程序能访问用户的私有数据或者控制那些会 对用户产生负面影响的设备。由于这种权限存在潜在的风险,系统可能不会 自动被赋予请求的应用程序。例如,任何一个由应用程序请求的危险权限可能 会显示给用户,并且在处理之前被要求确认。例如,以下权限就属于此类权限。 此时我们认为使用这种权限是危险的。 |
signature |
签名级别。系统只在请求的应用程序用同样的签名作为声明权限时才授予该权限。 如果认证匹配,则系统不通知用户或者无须用户明确批准就可以自动授权。 |
signatureOrSystem |
签名或者系统级别。系统仅仅将它授给Android系统镜像文件(*.img文件)中的应用程序, 或者是和系统镜像中的那些用同样认证签名的应用程序。一般情况下,尽量避免使用该选项, 这是由于signature保护层级应满足大多数需求和工程,而不管应用程序被确切地安装在何处。 signatureOrSystem权限适用于特定的特殊环境,在这样的环境里, 多个厂商已经将应用程序构建到系统镜像中,并且需要明确共享特定特征。 |