1、自定义权限
<permission
android:name="com.android.launcher3.permission.READ_SETTINGS"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="signatureOrSystem"
android:label="@string/permlab_read_settings"
android:description="@string/permdesc_read_settings"/>
1.1、标签名<permission />
1.2、标签属性
1.2.1 android:name 自定义权限名
1.2.2 android:permissionGroup 权限所属的权限组,同一组权限中,一个授权会导致其它都获得授权。
1.2.3 android:protectionLevel 权限保护级别:normal普通权限,dangerous危险权限,singnatureOrSystem只有相同签名的应用或系统应用才能获取该权限。
1.2.3 android:label 权限标签,一般是权限名称
1.2.4 android:description 权限描述
1.2.5 android:icon 可以为权限声明一个关联图标
2、application标签配置
<application
android:backupAgent="com.android.launcher3.LauncherBackupAgent"
android:fullBackupOnly="true"
android:fullBackupContent="@xml/backupscheme"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher_home"
android:label="@string/derived_app_name"
android:theme="@style/LauncherTheme"
android:largeHeap="@bool/config_largeHeap"
android:restoreAnyVersion="true"
android:supportsRtl="true" >
2.1、标签属性
2.1.1 android:allowBackup 是否允许应用参与备份,如果为false,则即使备份整个系统也不会备份该应用
2.1.2 android:hardwareAccelerated 是否启用硬件加速,Android3.0后默认开启
2.1.3 android:label 应用标签
2.1.4 android:icon 应用图标
2.1.5 android:persistent 应用是否在任何时候都保持运行状态,一般不需要设置该属性,仅有少部分系统应用需要该属性
2.1.6 android:process 该属性是应用程序所有组件运行的进程名。每个组件都能够设置自己的进程属性,以此来覆盖原来的默认值。如果该属性里设置的名字以冒号开头(:),那么在需要的时候它将生成该应用程序的一个私有新进程。如果进程名以小写字母开头,则生成以该进程名命名的一个全局进程。全局进程可以用来与其他应用程序分享,以便降低资源消耗。
2.1.7 android:theme 主题风格
2.1.8 android:largeHeap 使用一个较大的堆栈
2.1.9 android:allowTaskReparenting 是否允许更改活动所属的任务,默认是false,即在活动生命周期内,其时钟属于拉起该活动的堆栈(进程)。
例如在email里点击链接,链接会拉起browser的活动来展示网页,默认情况下该活动与email是属于同一个任务,此时返回桌面点击browser是看不到网页活动的。
如果该属性为true,则相当于新建一个task来打开网页,此时从browser进入是可以看到该网页的,并且在网页界面返回桌面后再点击email,不会见到网页界面。
activity可以定义自己的allowTaskReparenting已覆盖application中的属性设置。
2.1.10 android:backupAgent备份代理,当需要执行备份时,通过该类进行
2.1.11 android:banner banner用于指定一个drawable资源,该资源会在TV Home中表示一个应用(轮播图?),无默认值
2.1.12 android:debuggable 该应用是否允许debug,如果为true,即使是user模式也可以进行debug
2.1.13 android:description 应用描述,必须指向一个string资源,不能为字面值,无默认值
2.1.14 android:enabled 应用内组件是否可用,默认为true,若为false则Android无法实例化该Application
2.1.15 android:hasCode 应用是否包含代码,默认为true;应用只有在它使用内建组件类的时候才会含有代码,比如使用AliasActivity类的activity,这是一个比较罕见的情况。
2.1.16 android:isGame 是否为游戏应用,默认为false,系统可能会将游戏应用单独显示
2.1.17 android:killAfterRestore 默认为true,在全局恢复后,会终止该程序的运行
2.1.18 android:logo 应用logo
2.1.19 android:manageSpaceActivity Activity实现类的完全限定名,系统可以启动该Activity来管理应用所占空间
2.1.20 android:permission 其他应用必须具备指定的权限,才能访问该应用提供的组件
2.1.21 android:restoreAnyVersion 即使应用版本不匹配,也尝试进行恢复操作
2.1.22 android:requiredAccountType 应用运行需要的账户类型,如果你的app需要一个账户,这个属性值必须与你的应用account authenticator类型一致(与通过AuthenticatorDescription定定义的一致),例如 "com.google"。
这个默认值为null,表明应用可以在没有任何账户的情况下工作。警告:如果账户数据可能会展现个人身份信息,声明这个属性并把它设置为null则是很重要的。这样“受限个人资料”就不能使用你的应用访问属于用户的个人信息。
2.1.23 resizeableActivity 默认为true,允许多窗口模式;如果为false,则在多窗口模式下,启动该应用会自动变为全屏
2.1.24 android:restrictedAccountType 受限账户类型,设定本应用程序所需的账户类型,并允许受限用户访问机主的该账户。 如果应用程序需要使用 Account 并且允许受限用户访问主账户,本属性值必须与应用程序的账户认证类型(由 AuthenticatorDescription 定义)吻合,比如“com.google”。
默认值为 null ,表示应用程序不需要 任何账户就可以运行。提醒: 设置本属性将允许受限用户通过主账户使用你的应用程序,这可能会泄露个人身份信息。如果账户可能会泄露个人信息,请勿使用本属性,而是使用 android:requiredAccountType 属性,以禁止受限用户的使用。
2.1.25 android:supportsRtl 是否支持自右向左布局
2.1.26 android:taskAffinity 设置应用affinity,默认情况下,应用程序中的所有 Activity 都共享同一个 affinity 。affinity 的名称与 < manifest > 元素中设置的包名称相同。
2.1.27 android:testOnly 表明应用只用于测试,可能会暴露漏洞,只能通过adb安装
2.1.28 android:uiOptions 默认为none,没有额外的UI参数。splitActionBarWhenNarrow 当横向空间受限时(比如设备处于纵向模式时),在屏幕底部添加一横条,
用于显示 ActionBar 中的 Action 项。 这时不再是在屏幕顶部的 ActionBar 中显示有限的几个 Action 项了,ActionBar 拆分为顶部导航栏和底部横条。
这就确保了合理的可用空间,不仅可以容纳 Action 项,还可以在顶部显示导航和标题。 菜单项不会被拆分为两部分,还是会放在一起显示
2.1.29 android:usesCleartextTraffic 默认为true,禁止通过网络进行明文传播。该选项仅对使用Android提供的组件(DownloadManager Media)等起作用,对于第三方无法约束。
2.1.30 android:vmSafeMode 默认为false,表示可以在不安全的模式下运行(允许即时编译),如果为true,则会禁用Dalvik的JIT编译器,或者ART的AOT编译器。
3、Activity标签
<activity
android:name="com.android.launcher3.Launcher"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:stateNotNeeded="true"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="unspecified"
android:configChanges="keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenSize|screenLayout|smallestScreenSize"
android:resizeableActivity="true"
android:resumeWhilePausing="true"
android:taskAffinity=""
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MONKEY"/>
<category android:name="android.intent.category.LAUNCHER_APP" />
</intent-filter>
</activity>
3.1 Activty属性
3.1.1 android:name 具体类的完全限定名
3.1.2 android:launchMode 标准模式standard,每次跳转都回创建一个实例;栈顶单例singleTop,如果要启动的活动恰好位于栈顶,则使用栈顶的活动。
任务单例singleTask如果在当前栈中存在该活动,将该活动以上的活动出栈,将该活动移动到栈顶。
单例singleInstance单独为该活动创建一个栈,从而保持其单例模式。
3.1.3 android:clearTaskOnLaunch 默认为false,如果为true,则当应用返回桌面时,会销毁所有栈中除主活动意外的所有活动,从而每次启动都从主活动重新启动。
该属性仅对每个活动栈中的根活动起作用,其它活动会自动忽略该属性。
3.1.4 android:stateNotNeeded 默认为false,当为true时会不会保留活动中间状态,即onSavedInstance不会被执行,onCreate的bundle参数也会传入null。
3.1.5 android:windowSoftInputMode 该属性会影响两点:一是软键盘状态;二是窗口布局,如果键盘过大遮挡窗口时,是否调整窗口大小及焦点位置,以便让焦点位置可见。
stateUnspecified 默认项,未指定键盘状态,系统自动或根据主题来决定键盘状态。键盘的默认设置
stateUnchanged 保持键盘状态
stateHidden 隐藏键盘,只有在启动活动时有效,返回到该活动无效。
stateAlwaysHidden 总是隐藏键盘
stateVisible 键盘可见
stateAlwaysVisible 键盘总是可见
adjustUnspecified 由系统决定是否调整主活动尺寸,以及保持焦点可见;获得焦点的主活动默认选项
adjustResize 总是调整主活动尺寸,以及保持焦点可见
adjustPan 窗口不会调整大小以保持焦点可见,而是平移窗口内容,以保持焦点可见;与调整大小相比,只有关闭键盘才能访问被平移遮挡的部分。
3.1.6 android:screenOrientation 屏幕旋转朝向,多窗口模式下会忽略该选项
unspecified 默认设置,由系统决定Activity的屏幕朝向,可能会出现机器间差异。
behind 与堆栈中紧挨着它的活动的朝向相同
landscape 横屏模式
portrait 竖屏模式
reverseLandscape 与正常横屏模式反向
reversePortrait 与正常竖屏方向反向
sensorLandscape 横屏模式,由传感器决定横屏时的方向
sensorPortrait 竖屏模式,有传感器决定界面朝向
userLandscape 横屏模式下,如果用户锁定了屏幕朝向,则使用用户锁定的朝向,否则使用传感器决定朝向
userPortrait 竖屏模式下,如果用户锁定了屏幕朝向,则使用用户锁定的朝向,否则使用传感器决定朝向
sensor 完全由传感器决定朝向,有些设备默认不会旋转四个朝向,因此设备间存在差异
fullSensor 完全由传感器决定朝向,强制使用四个朝向旋转。
nosensor 忽略传感器信息,由系统决定朝向,与unspecified类似
user 采用用户当前偏好
fullUser 如果用户锁定了基于传感器的旋转,它的行为与user相同,否则它的行为与fullSensor相同,并允许4种可能的屏幕方向中的任何一种。
locked 锁定朝向为当前屏幕朝向
3.1.7 android:configChanges 声明活动自己处理配置更改,默认情况下当配置发生更改时活动会重启,声明该属性后,当对应配置发生更改时,活动的 onConfigurationChanged()
方法会执行,普通应用应该尽量避免使用该属性。
mcc IMSI移动国家代码(MCC)已更改- SIM已检测到并更新了MCC
mnc IMSI移动网络代码(MNC)已更改- SIM已检测到并更新了MNC
locale 语言环境发生了变化——用户选择了一种新的语言来显示文本。
touchscreen 触摸屏变了。(这种情况通常不应该发生。)
keyboard 键盘类型已更改—例如,用户已插入外部键盘。
keyboardHidden 键盘的可访问性发生了变化——例如,用户显示了键盘。
navigation 导航类型(轨迹球/dpad)已更改。(这种情况通常不应该发生。)
screenLayout 屏幕布局已经改变——这可能是由于激活了不同的显示。
fontScale 字体缩放系数发生了变化——用户选择了一个新的全局字体大小。
uiMode 用户界面模式发生了变化——这可能是由于用户将设备投射到桌面/汽车停靠站或夜间模式发生了变化
orientation 屏幕方向已经改变——用户已经旋转了设备。Android3.2以上需要同时声明screenSize属性
screenSize 当前屏幕尺寸发生改变,通常是由于屏幕旋转
smallestScreenSize 屏幕尺寸发生改变,且改变与屏幕朝向无关,即由于物理切换引起的。
layoutDirection 布局朝向发生改变,例如从左向右LTR变为从右向左RTL
3.1.8 android:resizeableActivity 允许多窗口模式
3.1.9 android:resumeWhilePausing 在前一个Activity还在处理onPause事件时,就允许该Activity执行,用于快速启动界面,但是不能申请额外资源(例如相机)
3.1.10 android:taskAffinity 该活动所属的Task(堆栈),通常情况每次从桌面完全启动一个app时创建一个对应的Task,后续从此活动跳转的Activity都回入该队列。
“”空字符表示该Activity不与任何任务关联,即该Activity所在的Task只有自己。
3.1.11 android:enabled="true" 该Activity是否可用,默认为true
3.1.12 android:theme 活动使用的主题
3.1.13 android:excludeFromRecents 该Activity不进入最近活动列表
3.1.14 android:autoRemoveFromRecents 将该活动从最近活动列表中移除
3.1.15 android:label 活动标签
3.1.16 tools:node 合并清单时,冲突处理策略,详见https://developer.android.google.cn/studio/build/manifest-merge
4、<provider/>标签
<provider
android:name="com.android.launcher3.LauncherProvider"
android:authorities="com.android.launcher3.settings"
android:exported="true"
android:writePermission="com.android.launcher3.permission.WRITE_SETTINGS"
android:readPermission="com.android.launcher3.permission.READ_SETTINGS" />
4.1、标签属性
4.1.1 android:name Provider的实现类,完全限定名
4.1.2 android:authorities 该provider所能处理的URI,多个URI时使用分号隔开
4.1.3 android:exported 其它应用能否使用该provider
4.1.4 android:writePermission 客户端必须具备列出的权限,才能通过该Provider进行数据更改
4.1.5 android:readPermission 客户端必须具备列出的权限,才能通过该provider读取数据
4.1.6 android:grantUriPermissions 是否临时授予权限给那些没有权限访问该Provider的程序,以便其它程序获得临时授权。
使用FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION对应用临时授权
从而使应用可以访问Intent中的Uri,例如邮件系统调用图库打开附件图片,图库是没有权限
读取邮件的,但是邮件系统可以使用该方式临时授予图库访问附件URI的权限。
如果为true,则临时权限可以访问该Provider的任何数据;如果为false,则只能访问<grant-uri-permission>
所列出的URI。
4.1.7 android:multiprocess 默认Provider在其所在的进程中被实例化,是单例的;如果为true的话则会为每个使用该Provider的进程创建
一个实例,从而避免进程间通信的开销。
4.1.8 android:permission 访问该Provider必须具备的权限
5、<uses-sdk/>标签
<uses-sdk android:targetSdkVersion="25" android:minSdkVersion="21"
tools:overrideLibrary="android.support.test.uiautomator.v18"/>
5.1 标签属性
5.1.1 android:targetSdkVersion 应用目标sdk,在该APILevel下,启动所有系统特性,默认与android:minSdkVersion相同
5.1.2 android:minSdkVersion 应用所能支持的最低版本
5.1.3 tools:overrideLibrary 当添加的三方库与应用支持的版本不匹配时,使用该选项忽略报错信息。
6、<uses-library />
<uses-library android:name="android.test.runner" />
android.app, android.content, android.view, and android.widget这些包在默认库中,是被默认包含的,如果非默认包的则可能需要使用该属性声明。
具体应参考所要使用的包的指南。
6.1、标签属性
6.1.1 android:name 要使用的库的包名
6.1.2 android:required 该库是否是必须的
7、<instrumentation />标签
<instrumentation
android:functionalTest="false"
android:handleProfiling="false"
android:name="android.support.test.runner.AndroidJUnitRunner"
android:targetPackage="com.android.launcher3" >
</instrumentation>
声明一个instrumentation以监视App与系统的交互
7.1、标签属性
7.1.1 android:functionalTest Instrumentation是否应该作为功能测试运行
7.1.2 android:handleProfiling 如果它确定分析何时开始和停止,则为“true”;如果分析在整个运行时间中持续,则为“false”。
值“true”使对象能够针对特定的操作集进行分析。默认值是“false”。
7.1.3 android:name 执行监测的具体子类,必须指定完全限定名
7.1.4 android:targetPackage Instrumentation要运行的程序的包名
部分AndroidManifest属性记录【持续更新】
最新推荐文章于 2025-06-23 03:29:56 发布