AndroidManifest文件

<?xmlversion="1.0"encoding="utf-8"?>

<manifest>

<uses-permission/>

<permission/>

<permission-tree/>

<permission-group/>

<instrumentation/>

<uses-sdk/>

<uses-configuration/>

<uses-feature/>

<supports-screens/>

<compatible-screens/>

<supports-gl-texture/>

<application>

<activity>

<intent-filter>

<action/>

<category/>

<data/>

</intent-filter>

<meta-data/>

</activity>

<activity-alias>

<intent-filter>...</intent-filter>

<meta-data/>

</activity-alias>

<service>

<intent-filter>...</intent-filter>

<meta-data/>

</service>

<receiver>

<intent-filter>...</intent-filter>

<meta-data/>

</receiver>

<provider>

<grant-uri-permission/>

<meta-data/>

</provider>

<uses-library/>

</application>

</manifest>



<manifest>

<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>

描述:

AndroidManifest.xml文件的root元素.它一定要包含<application>元素并且指定xmlns:androidpackage的属性

属性:

package

这个包名作为一个独一无二的标识为这个应用服务.它也是这个应用默认的进程名,还是一个activity的默认关联名(<activity>标签的taskAffinity属性).

注意:一旦你发布你的应用,不能改变这个报名,这个包名定义你应用的标识,因此,如果你改变它,应用会认为作为一个不同的应用并且使用以前的版本不能更新新的版本.

android:sharedUserId

将被其他应用分享的一个Linux用户名.默认的,android给每一个应用都分配了它自己的唯一的用户ID.然而,如果两个或多个用户的这个属性设置的值一样的话,它们都将分享一个相同的ID--还要提供签署的相同的证书.应用通过相同的用户ID就能够使用任何一个应用的数据并且,如果有需求,可以运行在同一个进程中.

android:sharedUserLabel

为共享的用户ID设置的一个用户是否可读的标签.这个标签要使用一个string资源中的参照;也就是说它不能直接使用一个字符串.

android:installLocation

默认的应用安装路径.

1."internalOnly"

这个应用一定只会被安装在设备的内部存储设备上.如果这个被设置应用绝不会安装在外部存储设备上.如果内部存储空间已满,系统将不会安装这个应用.如果你不设置android:installLocation属性的话,这个值就是应用默认的.

2."auto"

这个应用可能安装在外部存储设备上,但是系统默认将应用安装在内部存储设备上.如果内部存储空间已满,系统就会将应用安装在外部存储设备上.一旦安装了,用户通过设置可以将应用移动到内部存储设备或者外部存储设备上.

3."preferExternal"

应用更情愿安装在外部存储设备上(SD),但是不能保证系统总是会遵守这个请求.如果系统检测不到外部存储设备或者外部存储设备已满的话,应用可能被安装在内部存储设备上,或者如果应用使用向前锁定机制的话也一样(外部存储设备不支持).一旦安装了,用户通过设置可以将应用移动到内部存储设备或者外部存储设备上.

警告:如果你的应用使用了googlePlay"复制保护"功能的话,它不能被安装到一个设备的SD卡上.然而,如果你使用GooglePlay"应用监听"功能的话,你的应用可以被安装在内部或者外部存储设备上,其中包括SD.

注意:默认的,你的应用将被安装在设备的内部存储设备上,并且除非你定义了"auto"或者"preferExternal"值,否则应用将不能被安装在外部存储设备上.

当一个应用安装在外部存储设备上时:

1..apk文件将存储在外部存储设备上,但是应用产生的数据(例如数据库)将还是被存储在内部设备上.

2.在容器中的.apk文件,将被加密,加密后,这个文件只允许设备去执行文件的安装操作.

3.如果用户有请求的话,应用可以移动到内部存储设备上.

关于使用这个属性的更多信息,查看AppInstallLocation(包括如何去维持向后兼容).



<uses-permission>

描述:

在一些情况下,你通过<uses-permission>请求的权限可能影响到你的应用如何被GooglePlay过滤.

如果你请求一个硬件操作,例如相机,GooglePlay假定你的应用请求底层硬件特性,并且从不支持相机的设备中过滤掉这个应用.

为了控制过滤,需要在<uses-feature>元素中特别声明硬件的特性,而不是依赖GooglePlay"发现"<uses-permission>中的请求.另外,如果你想为一个特定的属性使得这个属性过滤无效的话,你可以在<uses-feature>声明中添加一个android:required="false"属性.

查阅:PermissionsSecurityandPermissions两个单独的部分.



<permission>

语法:

<permissionandroid:description="stringresource"

android:icon="drawableresource"

android:label="stringresource"

android:name="string"

android:permissionGroup="string"

android:protectionLevel=["normal"|"dangerous"|

"signature"|"signatureOrSystem"]/>

描述:

查看文档中的Permissions部分和SecurityandPermissions部分关于更多permissions如何工作的信息.

属性:

android:description

这个权限的一个用户可读的描述,label更长并且信息量更大.它可能用来给用户解释这个权限,例如,当用户询问是否授予权限给其他应用时.

这个属性的值必须设置为引用资源文件,不像label可以直接用string字符串.

android:label

一个代表这个权限的drawable资源文件引用.

android:label

这个权限的一个名字,并且这个名字可以显示给用户.

为了方便,当你在开发应用的时候,这个label可以直接使用一个字符串.但是,当你的应用准备发行的时候,它应该被设置为一个string资源文件的引用,以至于它可以被本地化就像在用户接口中的其他字符串一样.

android:name

这个权限的名字.这个名字将用在代码中,从而实现权限的参照.例如,ina<uses-permission>elementandthepermissionattributesofapplicationcomponents.

这个名字一定要被设置为唯一的,因此它应该使用java样式命名,例如:"com.example.project.PERMITTED_ACTION".

android:permissionGroup

分配这个权限到一个组中.这个属性的值是组的名字,它一定要被声明在这个应用或者其他应用的<permission-group>元素中.如果这个属性没有被设置,那么这个权限就不属于一个组.

android:protectionLevel

描述了在权限中隐藏的潜在风险,并且当请求这个权限时,决定是否授予这个权限到一个应用中.这个值可以设置为下面中的一个:

1."normal"

默认的.一个底危险级别的权限,对其他应用,系统或者用户有这最低风险.在安装应用的时候系统将自动允许这一类型的权限的请求,不会询问用户的明确的批准(尽管用户可以在安装的时候检查到这些权限).

2."dangerous"

一个高风险权限,这个权限将给予一个请求,应用将使用私有用户数据或者可能给用户带来消极影响的设备控制权限.因为这种权限介绍了潜在风险,因此,系统可能不会自动的授予这个权限到这个请求的应用中.例如:任何通过一个应用的危险权限请求都可能显示给用户并且在进行下一步之前需要通过用户的确认,或者一些其他的方法可能采取措施去避免用户自动允许使用这些设备.

3."signature"(签名)

只有当请求的应用和声明了这个权限的应用的签名证书一样时,这个权限才会被系统授权.如果证书匹配,系统自动的同意这个权限并且不会通知用户,或者询问用户明确的认可.

4."signatureOrSystem"

请避免使用这个选项.



<instrumentation>

语法:

<instrumentationandroid:functionalTest=["true"|"false"]

android:handleProfiling=["true"|"false"]

android:icon="drawableresource"

android:label="stringresource"

android:name="string"

android:targetPackage="string"/>

描述:

定义一个Instrumentation类能够然你去监听一个应用和系统的交互.Instrumentation类在应用的任何组件实例化之前实例化.

属性:

1.android:functionalTest

Instrumentation类是否作为一个功能测试运行.默认的值为false.

2.android:handleProfiling

WhetherornottheInstrumentationobjectwillturnprofilingonandoff"true"ifitdetermineswhenprofilingstartsandstops,and"false"ifprofilingcontinuestheentiretimeitisrunning.Avalueof"true"enablestheobjecttotargetprofilingataspecificsetofoperations.Thedefaultvalueis"false".

3.android:name

Instrumentation子类的名字.这个应该是设置为一个完整类型名称(例如,"com.example.project.StringInstrumentation").然而,有一种便捷方法,如果名字的第一个字符是一个句点,这个名字将添加到<manifest>元素中的包名下.



<uses-sdk>

语法:

<uses-sdkandroid:minSdkVersion="integer"

android:targetSdkVersion="integer"

android:maxSdkVersion="integer"/>

描述:

让你通过一个API整数等级表示一个应用对一个或多个android操作系统的兼容性.通过一个应用展示的API等级会和给予的android系统API等级进行比较,这可能在不同android设备之间存在很大不同.

除去它的名字不管,这个元素用用来指定API等级,而不是SDK或者Android平台的版本.API等级应该总是一个单独的整数.你不能得到API等级从它关联的Android版本号.

也请阅读VersioningYourApplications.

GooglePlay<uses-sdk>属性

GooglePlay过滤对用户来说是不可视的应用,因此,用户只能看到并且下载和他们设备兼容的应用.它过滤应用的方法中的一种就是通过Android版本兼容.为了做到这个,GooglePlay检查每一个应用的manifest文件的<uses-sdk>属性,从而建立它的版本兼容范围,然后基于与用户的Android系统版本的API等级进行比较,从而显示或者隐藏应用.

属性:

android:minSdkVersion

一个整数指定这个应用能运行的最低API等级需求.如果系统的API等级比指定的要小的话Android系统将防止用户安装应用程序.你应该总是声明这个属性.

警告:如果你不声明这个属性的话,系统假设这个值是1,也就表明了你的应用将对所有Android版本都兼容.但是如果你的应用不是对所有版本都兼容的话(例如,它使用的是API3),并且你没有声明适当的minSdkVersion,当安装到一个API等级大于3的设备上时,当试图使用不可用的API,应用在运行时就会奔溃.由于这个原因,minSdkVersion属性中必然会声明适当的API等级.

android:targetSdkVersion

指定应用目标的API等级.如果不设置的话,默认的值和给定的minSdkVersion一样.

这个属性告诉系统你已经测试了不利的目标版本并且系统不要启用任何兼容行为去维持你的应用的向后兼容通过标记的版本.这个应用仍然可以运行在旧的版本(直到minSdkVersion).

随着Android新版本的发展,一些行为和事件也可能发生变化.然而,如果系统的API等级比你在应用的targetSdkVersion声明的等级要高的,系统可能启动兼容行为去确保你的应用能继续按你的期待去运行.你可以禁止使用兼容行为通过指定targetSdkVersion去匹配它正在运行的平台的API等级.例如,设置这个属性的值为11或者更高允许系统去应用(申请)一个新的样式到你的应用中当你运行在android3.0或者更高的级别.或者更高的级别.

为了维持你的应用和每一个Android版本,你应该增加这个属性的值去匹配最新的API等级,然后彻底的测试在对应的平台版本上.

android:maxSdkVersion

在android1.51.62.02.0.1当安装一个应用时,系统能够会检查这个属性的值并且当系统升级的时候这个应用将会被重新检测.不管什么情况,如果这个应用的maxSdkVersion属性在系统自己使用的APL级别之下,系统将不会允许这个应用的安装.在系统升级之后的重新检测情况下,系统会将你的应用移除.

警告:不建议声明这个属性.首先你的应用不需要设置这个属性去作为阻塞部署的一种方式到一个新的Android平台发布版本上.有意的,新版本的平台是完全向后兼容的.所以你的应用也应该在新的版本上能够正确的运行,假设你的这个应用使用标准的API并且遵循最好的开发实践的话.第二,注意在一些情况下,声明这个属性可能造成在在系统更新到一个更高的API等级之后你的应用从用户设备中移除.

在Android2.0.1之后将不再检查或者实施maxSdkVersion属性在安装或者重新确认应用的时候.GooglePlay将继续使用这个属性作为一个过滤器.



<uses-configuration>

语法:

<uses-configurationandroid:reqFiveWayNav=["true"|"false"]

android:reqHardKeyboard=["true"|"false"]

android:reqKeyboardType=["undefined"|"nokeys"|"qwerty"|"twelvekey"]

android:reqNavigation=["undefined"|"nonav"|"dpad"|"trackball"|"wheel"]

android:reqTouchScreen=["undefined"|"notouch"|"stylus"|"finger"]/>

描述:

表明这个应用需要的硬件和软件特性.例如,一个应用可能会指定它需要一个物理键盘或者一个特定的导航设备,像一个轨迹球.这个属性通常用来避免将应用安装在不能正常运行的设备上.

如果一个应用能在不同设备上工作,他应该为每一个设备都指定一个<uses-configuration>声明.每个声明一定要完整.例如,如果一个应用需要5种方式的导航控制,一个能用手指操作的触摸屏,和一个标准键盘或者一个数字键盘,这个应用需要用两个<uses-configuration>元素去指定这些请求:

<uses-configurationandroid:reqFiveWayNav="true"android:reqTouchScreen="finger"

android:reqKeyboardType="qwerty"/>

<uses-configurationandroid:reqFiveWayNav="true"android:reqTouchScreen="finger"

android:reqKeyboardType="twelvekey"/>

属性:

1.android:reqFiveWayNav

应用是否需要请求一个五项导航控制Afive-waycontrolisonethatcanmovetheselectionup,down,right,orleft,andalsoprovidesawayofinvokingthecurrentselection.它可能是一个D-pad(directionalpad)方向键,轨迹球或者其他设备.

如果一个应用需要一个方向控制,又不需要控制的具体类型,他可以设置设个属性为true并且忽视reqNavigation属性,但是,如果它需要一个方向控制的具体类型,它可以忽略这个属性而用reqNavigation代替.

2.android:reqHardKeyboard

应用是否需要物理键盘.

3.android:reqKeyboardType

应用请求键盘的类型,假设所有类型.这个属性不会区分是物理键盘还是软件键盘.如果要请求物理键盘,需要这这里指定这个类型并且设置reqHardKeyboard属性为true.

属性值:

1."undefined"

应用不需要一个键盘.默认值

2."nokeys"

应用不需要一个键盘.

3."qwerty"

应用需要一个标准键盘

4."twelvekey"

应用需要一个数字键盘(0_9,*,#)

4.android:reqNavigation

应用需要一个导航设备,假设所有的.

属性值:

1."undefined"

设备不需要任何类型的导航控制.默认值

2."nonav"

应用不需要一个导航设备

3."dpad"

应用需要一个D-pad(方向键)

4."trackball"

应用需要一个轨迹球

5."wheel"

应用需要一个导航轮

如果应用需要一个导航控制,但是控制的具体类型不要紧,它可以设置reqFiveWayNavtrue而不是设置这个.

5.android:reqTouchScreen

应用请求的接触屏,ifanyatall.

属性值:

1."undefined"

应用不需要一个触摸屏.默认值

2."notouch"

应用不需要一个触摸屏

3."stylus"

应用需要一个笔写触摸屏

4."finger"

应用需要一个手写触摸屏.



<uses-feature>

语法:

定义应用所使用到的一个单独的硬件或者软件特性.

注意:当定义一个feature你一定也要视情况定义一个权限.

属性:

1.android:name

用一个描述字符串来指定一个你应用所使用的单独的硬件或者软件特性.校验描述字符串是否正确使用HardwarefeaturesSoftwarefeatures两个表格.

2.android:required

描述定义在android:name中的需求是否有效.

1.为true,表示绝对需要这个特性,并且没有它将不能适当的运行

2.为false,表示应用更喜欢使用这个特性如果这个特性有效的话,但是没有这个特性也能运行.

3.android:glEsVersion

应用所用到的OpenGLES版本号.更高的16进制数表示主要的版本,越低的16进制表示次要版本.例如,指定OepnGLES2.0版本你会设置"0x00020000".如果要让2.1版本有效的话,你就要设置值为0x00020001.

一个应用在Manifest文件中应该只指定一个android:glEsVersion属性,如果指定多于一个,那么数字上更高的将会被使用,其他的会被忽略.

如果一个应用没有指定这个属性,应用将会假设只请求使用OpenGL1.0,1.0支持所有android设备.

如果应用同时支持1.02.0,那么应用应该声明2.0.

<supports-screens>

语法:

<supports-screensandroid:resizeable=["true"|"false"]

android:smallScreens=["true"|"false"]

android:normalScreens=["true"|"false"]

android:largeScreens=["true"|"false"]

android:xlargeScreens=["true"|"false"]

android:anyDensity=["true"|"false"]

android:requiresSmallestWidthDp="integer"

android:compatibleWidthLimitDp="integer"

android:largestWidthLimitDp="integer"/>

描述:

让你指定你应用支持的屏幕大小,并且能够开启屏幕兼容模式当屏幕比你应用所支持的屏幕大时.在你应用中总是使用这个元素去指定你应用所支持的屏幕大小是很重要的.

如果一个应用正确的调整到全屏的话,那么这个应用支持一个给定的屏幕大小,通常大多数应用的大小调整都是由系统来操作,并且你不需要去做任何额外的事情去让你的应用运行在一个更大屏幕上的手机设备上.然而,在不同屏幕大小的时候,通过替代布局资源让你去优化你的应用是很重要的.例如,当从手机设备换到平板设备的时候,你可能会想要去修改一个activity的布局文件.

然而,如果你的应用在调整屏幕大小以适应不同屏幕尺寸大小做的并不好,那么,你可以使用<supports-screens>元素的属性去控制:应该被分发到更小的屏幕还是使用系统的屏幕兼容模式去按比例扩大UI到适合屏幕的大小.

当你没有为更大的屏幕尺寸设计并且正常屏幕大小没有达到合适的效果,屏幕兼容模式将通过模仿正常大小的屏幕和介质的密度来扩展你的UI,然后缩放UI以至于能填充整个屏幕.但是需要注意的是,这会对像素造成影响从而模糊你的UI,因此,最好的方法还是为大屏幕去优化你的UI.

更多信息请参考文档的SupportingMultipleScreens.


文章链接:http://blog.csdn.net/murongshusheng/article/details/7717611


更多相关文章

  1. Marshmallow and User Data
  2. Android动态权限列表
  3. android打电话简单功能(完整代码)
  4. Android(安卓)6.0正常权限、危险权限以及特殊权限
  5. Android中模拟HOME键功能
  6. ViewBinding与RecycleView(一)
  7. 【Android學習專題】視覺介面篇:Android布局及属性归总(查询用)
  8. 2010.06.05日志:Android(安卓)Gallery左右循环旋转方法
  9. Launcher研究之AndroidManifest.xml[转]

随机推荐

  1. Android动画
  2. 布局(1、线性布局)
  3. ListPreference
  4. 不停地切换两张图片ViewFlipper
  5. 2.6.2 Notification的功能与用法
  6. Android中的时间日期选择器
  7. Android(安卓)添加系统服务的方法
  8. 2.5.2 使用alertdialog 创建列表对话框
  9. ViewFlipper+GestureDetector实现不循环
  10. Android RelativeLayout相对布局属性简析