<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="stringresource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" |"internalOnly" | "preferExternal"]>
. . .
</manifest>
<application>
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>
AndroidManifest.xml文件根标签. 必须包含<application>标签, 必须指定xmlns:android和package属性.
xmlns:android: 定义android的命名空间, 取值固定必须为:"http://schemas.android.com/apk/res/android".
package: 为application指定一个包名. 这个名字应该是唯一的, 可以包含大小写字母, 数字和下划线. 私人包名只能从字母开始. 为了防止冲突, 应该使用自己的互联网域名为基础作为包名. 比如google以com.google开头, 永远也不要使用com.example作为包名起始部分. 包名会作为APP的唯一标示, 并且也会作为默认的进程名称和默认的任务名字. 一旦发布之后就不应该更改包名, 否则会被系统当做两个APP处理.
android:sharedUserId: 指定一个与其它APP共享的Linux userID. 默认情况下Android为每个APP分配唯一的User ID, 如果为两个或以上的APP设置了相同的sharedUserId, 那么它们将具备相同的User ID(它们也需要相同的证书签名). 相同User ID的APP可以访问彼此的数据, 如果需要的话还可以运行在同一个进程中.
android:sharedUserLabel: 为共享User ID指定一个label. 必须为该属性指定一个string资源, 不能使用rawstring. 必须指定android:sharedUserId该属性才有意义.
android:versionCode: 为APP指定一个内部版本号. 用于比较哪个版本更新, 越大的数字表示版本越新, 这个数字不会展示给用户看,展示给用户看的数字是versionName. 该属性必须被设置为整型, 比如100. 我们可以自己定义这个数字, 只要后面的版本号更大就可以. 比如我们可以通过组合两个十六进制的数字为x.y格式, 或者只是简单的加一.
android:versionName: 给用户看的版本号. 该属性可以设置为string资源或者rawstring. 除了给用户看, 这个属性没有其它用处.
android:installLocation: APP默认的安装路径. 可以接受三个指定的参数:
internalOnly: APP只能安装在设备的内部存储空间中. 如果内部存储空间不足, 那么将不安装. 该值为默认值.
auto: 在这种情况下APP会默认安装在内部存储空间中,如果空间不足, 就会安装在外部存储空间中. 安装之后用户可以通过设置在内部和外部存储空间中移动.
preferExternal: 在这种情况下APP会默认安装子啊外部存储空间中, 但是不保证一定成功, 当外部储存不可用或者已满的时候, 会安装在内部空间中. 在安装之后可以通过设置在内部和外部存储空间中移动.
当APP安装在外部存储空间中的时候:
1. .apk文件将会保存在外部空间, 但是APP的数据还是会被保存在内部存储空间.
2. .apk文件所在的容器将会被加密,使得只有该设备上安装的APP才能操作这些数据. 用户不能将SD卡放在别的设备上然后使用SD卡上的APP.
3. 根据用户的需求, APP可以被移动到内部存储空间.
在默认的internalOnly情况下, 用户不能将APP从内部空间移动到外部.
<meta-data android:name="string"
android:resource="resource specification"
android:value="string" />
<activity>
<activity-alias>
<application>
<provider>
<receiver>
<service>
一个可以提供给父组件的键值对数据. 每个组件可以包含多个<meta-data>标签, 该标签指定的数据会以Bundle对象提供给组件, 可以通过PackageItemInfo.metaData获取到.
普通数值通过value属性指定, 资源文件则通过resource属性指定.
android:name: 为<meta-data>指定一个名字, 必须唯一, 比如:"com.example.project.activity.fred".
android:resource: 指定相关的资源ID, 比如: <meta-dataandroid:name="zoo" android:resource="@string/kangaroo"/>, 该ID可以通过Bundle.getInt()方法得到.
android:value: 指定一个值, 可以通过Bundle访问. 数据类型和对应的获取方法如下:
类型 |
获取方法 |
字符串, 转义字符需要使用”\\”, 比如”\\n”, Unicode字符需要使用”\\uxxxx”. |
getString() |
整型,比如100 |
getInt() |
布尔值, true或者false |
getBoolean() |
颜色值, 比如”#rgb”, “#argb”, “#rrggbb” |
getInt() |
浮点数, 比如”1.23” |
getFloat() |
<path-permissionandroid:path="string"
android:pathPrefix="string"
android:pathPattern="string"
android:permission="string"
android:readPermission="string"
android:writePermission="string" />
<provider>
为一个content provider指定路径和需要的权限.
android:path: 一个完整的URI的path, 只有符合这个path的访问路径才会被授权访问contentprovider.
android:pathPrefix: 指定一个URI path的初始部分, 满足这个初始部分的path的访问路径才会被授权访问contentprovider.
android:pathPattern: 指定一个完整的URI的path, 符合者可以访问contentprovider, 但是可以使用通配符.
android:permission: 想要访问contentprovider数据的客户端必须符合android:permission指定的名字, 才能访问. 可以一次指定读和写, 但是会被下面的android:readPermission和android:writePermission覆盖.
android:readPermission: 指定一个名字, 想要读取contentprovider的客户端必须满足这个名字, 才能访问.
android:writePermission: 指定一个名字, 想要写入contentprovider的客户端必须满足这个名字, 才能访问.
<permissionandroid:description="stringresource"
android:icon="drawableresource"
android:label="stringresource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" |"dangerous" |
"signature" |"signatureOrSystem"] />
<manifest>
为该APP或者其他APP声明一个访问组件或功能的权限. 满足该权限才可以访问.
android:description: 指定一个显示给用户的说明,可以显示的内容比label内容长. 必须为string资源, 不能是raw string.
android:icon: 为permission指定一个icon.
android:label: 为permission指定一个名字, 可以显示给用户看. 发布的时候建议使用string资源.
android:name: permission的名字, 这个名字不同于label,是在代码里引用permission的时候使用的. 比如在<user-permissioin>中声明. name必须唯一, 比如:"com.example.project.PERMITTED_ACTION".
android:permissionGroup: 为permission指定一个组. 该属性的值必须是一个组名,由<permission-group>声明. 如果没有使用permissionGroup属性, 那么所属的组为空.
android:protectionLevel: 指定该权限的风险等级, 可以取以下值:
值 |
描述 |
“normal” |
默认值, 给访问者一个低风险的权限. 系统会默认授予访问者这些权限而不用经过用户同意. |
“dangerous” |
一个高风险的权限. 系统默认情况下不会直接给予访问的APP这些权限, 而是会提示用户. |
“signature” |
只有符合签名的APP才会被授予权限. 如果签名符合, 则系统不会提示用户. |
“signatureOrSystem” |
Android系统映像和符合签名的APP可以被授予权限. 请尽量避免使用该参数, 因为一般情况下signature已经够用, signatureOrSystem用于某些情况下镜像内置应用需要共享数据的时候使用. |
参考:
http://developer.android.com/guide/topics/manifest/manifest-element.html
http://developer.android.com/guide/topics/manifest/meta-data-element.html
http://developer.android.com/guide/topics/manifest/path-permission-element.html
http://developer.android.com/guide/topics/manifest/permission-element.html