A006-AndroidManifest.xml解析 你的名字 2022-08-03 14:56 153阅读 0赞 AndroidManifest.xml这个文件在Android中很重要,包含了应用程序的所有配置,包含SDK版本、应用权限、四大组件、扩展数据等等,它包含很多标签,每个标签都有具体的作用,标签下都会有不同的属性,也有通用的属性,不同的属性可能会影响我们应用程序的效果,所以我们详细了解具体标签的具体属性的使用场景是非常必要的,下面笔者会以做过的一个项目的完整配置来给大家系统介绍一下这个文件的使用方法。 # AndroidManifest.xml配置例子 # <?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.infzm.o2o" android:versionCode="1" android:versionName="1.0.2" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.CALL_PHONE"/> <!-- 极光推送需要配置的权限 --> <permission android:name="com.infzm.o2o.permission.JPUSH_MESSAGE" android:protectionLevel="signature" /> <!-- Required 一些系统要求的权限,如访问网络等 --> <uses-permission android:name="com.infzm.o2o.permission.JPUSH_MESSAGE" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- Optional for location --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 极光推送权限配置end --> <!-- 友盟升级权限配置start --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- Permission for Unit Test --> <uses-permission android:name="android.permission.GET_TASKS" /> <!-- 友盟升级权限配置end --> <application android:name=".global.O2OApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.infzm.o2o.activity.SplashActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.infzm.o2o.activity.MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:uiOptions="" > <meta-data android:name="android.support.UI_OPTIONS" android:value="splitActionBarWhenNarrow" /> </activity> <activity android:name="com.infzm.o2o.activity.SettingsFeedback" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.BrowserActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.AboutUsActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.MoreSettingActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.SignUpActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.LoginAcivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.AddressActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden" > </activity> <activity android:name="com.infzm.o2o.activity.CameristInfoActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.ThemeInfolActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.SettingActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.ReserveActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden" > </activity> <activity android:name="com.infzm.o2o.activity.OrderReserveActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.OrderCheckActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.PictureActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@style/PicShowTheme" > </activity> <activity android:name="com.infzm.o2o.activity.OrderDetailActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.ForgetpasswordActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.MyFavoritesActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.WelcomeGuideActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> </activity> <activity android:name="com.infzm.o2o.activity.ClipImageViewActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.MeActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.OnlineSelectPic" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.ImagePagerActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" > </activity> <activity android:name="com.infzm.o2o.activity.CalendarViewActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.MessageActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.CameristCommentActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="com.infzm.o2o.activity.PayActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateVisible" > </activity> <activity android:name="com.infzm.o2o.activity.MessageDetailActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <!-- 极光推送配置 --> <!-- Required SDK核心功能 --> <activity android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.Translucent.NoTitleBar" > <intent-filter> <action android:name="cn.jpush.android.ui.PushActivity" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.infzm.o2o" /> </intent-filter> </activity> <!-- Required SDK核心功能 --> <service android:name="cn.jpush.android.service.DownloadService" android:enabled="true" android:exported="false" > </service> <!-- Required SDK 核心功能 --> <service android:name="cn.jpush.android.service.PushService" android:enabled="true" android:exported="false" > <intent-filter> <action android:name="cn.jpush.android.intent.REGISTER" /> <action android:name="cn.jpush.android.intent.REPORT" /> <action android:name="cn.jpush.android.intent.PushService" /> <action android:name="cn.jpush.android.intent.PUSH_TIME" /> </intent-filter> </service> <!-- Required SDK核心功能 --> <receiver android:name="cn.jpush.android.service.PushReceiver" android:enabled="true" > <intent-filter android:priority="1000" > <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!-- Required 显示通知栏 --> <category android:name="com.infzm.o2o" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> <!-- Optional --> <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver> <!-- Required SDK核心功能 --> <receiver android:name="cn.jpush.android.service.AlarmReceiver" /> <!-- User defined. For test only 用户自定义的广播接收器 --> <receiver android:name="com.infzm.o2o.receiver.MyReceiver" android:enabled="true" > <intent-filter> <action android:name="cn.jpush.android.intent.REGISTRATION" /> <!-- Required 用户注册SDK的intent --> <action android:name="cn.jpush.android.intent.UNREGISTRATION" /> <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!-- Required 用户接收SDK消息的intent --> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!-- Required 用户接收SDK通知栏信息的intent --> <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!-- Required 用户打开自定义通知栏的intent --> <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!-- Optional 用户接受Rich Push Javascript 回调函数的intent --> <action android:name="cn.jpush.android.intent.CONNECTION" /> <!-- 接收网络变化 连接/断开 since 1.6.3 --> <category android:name="com.infzm.o2o" /> </intent-filter> </receiver> <!-- Required . Enable it you can get statistics data with channel --> <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default" /> <meta-data android:name="JPUSH_APPKEY" android:value="815b618e1263a55325d958f1" /> <!-- </>值来自开发者平台取得的AppKey --> <!-- 极光推送配置end --> <!-- 友盟更新sdk --> <!-- Update Activitys Start --> <activity android:name="com.umeng.update.UpdateDialogActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" > </activity> <!-- Update Activitys End --> <!-- Caution! Do not change this app key. It is only for demo usage. --> <meta-data android:name="UMENG_APPKEY" android:value="552c9094fd98c5ee45000866" > </meta-data> <meta-data android:name="UMENG_CHANNEL" android:value="Umeng" > </meta-data> <service android:name="com.umeng.update.net.DownloadingService" android:process=":DownloadingService" > </service> <!-- 友盟更新end --> <!-- 友盟分享配置start --> <!-- ###################注册SDK使用的Activity###################### --> <!-- 分享编辑页 --> <activity android:name="com.umeng.socialize.view.ShareActivity" android:configChanges="orientation|keyboard" android:launchMode="singleTask" android:noHistory="true" android:theme="@style/Theme.UMDialog" android:windowSoftInputMode="stateVisible|adjustResize" > </activity> <!-- ############ QQ空间和QQ SSO授权的Activity注册 ############ --> <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 100424468,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的 APP ID --> <data android:scheme="tencent100424468" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" > </activity> <activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 友盟分享配置end --> </application> </manifest> 看到上面这么多配置,初学者可能会疯掉,大呼:“这什么鬼啊?看不懂,看不懂?大家先不要怕,其实它就只是个xml文件,先了解一下xml文件的结构,我们知道一个xml文件都会有 * xml标准文件头 * 根元素 * 子元素 我们每次创建项目会默认为我们创建这个文件,刚开始是这样的 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.devilwwj.pulltorefreshlistview" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 后面随着我们开发才不断往这个文件添加必须的配置。 ## `<manifest>` ## 首先,我们的根标签就是 **manifest**,有开始标签就有结束标签,所以**每个标签都是成对出现**的。 在我们的根标签中,需要指定package,应用的包名,具有唯一性。还需要指定应用当前的版本号versionCode和版本名称versionName;我们可以看到关于Android的属性都会有android:这样的前缀,这个是标准写法,我们每次敲完前缀之后可以通过代码提示功能来查看可以添加的属性,如下图: ![标签属性][20150810181310285] ## `<uses-sdk>` ## **uses-sdk**是为了程序兼容而存在的,它是如何做兼容的呢?也许从三个子项的名字上就可以猜测出来。 **minSdkVersion**:若手机或平板的API level低于apk的minSdkVersion,系统不能安装这个应用。 **targetSdkVersion**:API level在minSdkVersion和targetSdkVersion之间的版本可以直接执行程序(不需要打开任何兼容项)。若手机或平板的API level大于程序的targetSdkVersion,Android运行环境就需要模拟之前版本API的行为,这个称之为兼容。程序开发者如何确定这个值呢?自然是在对应平台上测试,具体的过程是:递增targetSdkVersion,每递增一次测试一次。 **maxSdkVersion:若手机或平板的API level 大于maxSdkVersion,程序不能安装或使用。google文档说**不推荐这个子项,因为Android 2.0.1后不检查这一项了,只有google play还会check这一项。 ## `<uses-permission>` ## > 摘自:[http://blog.csdn.net/dp1234/article/details/6239933][http_blog.csdn.net_dp1234_article_details_6239933] 这个配置是标识该应用申请系统授权具体的权限。 <table> <thead> <tr> <th>值</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>android.permission.ACCESS_CHECKIN_PROPERTIES</td> <td>允许读写访问”properties”表在checkin数据库中,改值可以修改上传</td> </tr> <tr> <td>android.permission.ACCESS_COARSE_LOCATION</td> <td>允许一个程序访问CellID或WiFi来获取粗略的位置</td> </tr> <tr> <td>android.permission.ACCESS_FINE_LOCATION</td> <td>允许一个程序访问精良位置(如GPS)</td> </tr> <tr> <td>android.permission.ACCESS_LOCATION_EXTRA_COMMANDS</td> <td>允许应用程序访问额外的位置提供命令</td> </tr> <tr> <td>android.permission.ACCESS_MOCK_LOCATION</td> <td>允许程序创建模拟位置用于测试</td> </tr> <tr> <td>android.permission.ACCESS_NETWORK_STATE</td> <td>允许程序访问有关的网络信息</td> </tr> <tr> <td>android.permission.ACCESS_SURFACE_FLINGER</td> <td>允许程序使用SurfaceFlinger底层特性</td> </tr> <tr> <td>android.permission.ACCESS_WIFI_STATE</td> <td>允许程序访问Wi-Fi网络状态信息</td> </tr> <tr> <td>android.permission.ACCOUNT_MANAGER</td> <td>允许一个应用程序启动账户认证,该权限只能系统去设置</td> </tr> <tr> <td>android.permission.AUTHENTICATE_ACCOUNTS</td> <td>允许应用程序的验证账户扮演一个账户管理者</td> </tr> <tr> <td>android.permission.BATTERY_STATS</td> <td>允许程序更新手机电池统计信息</td> </tr> <tr> <td>android.permission.BIND_APPWIDGET</td> <td>允许应用告诉AppWidget哪个应用能够访问该AppWidget的数据</td> </tr> <tr> <td>android.permission.BIND_DEVICE_ADMIN</td> <td>必须通过关机接收者的请求,来确保只有系统能够与之交互</td> </tr> <tr> <td>android.permission.BIND_INPUT_METHOD</td> <td>必须通过InputMethodService的请求,来确保只有系统能够与之绑定</td> </tr> <tr> <td>android.permission.BIND_WALLPAPER</td> <td>必须通过WallpaperService的请求,来确保只有系统能够与之绑定</td> </tr> <tr> <td>android.permission.BLUETOOTH</td> <td>允许程序连接到已配对的蓝牙设备</td> </tr> <tr> <td>android.permission.BLUETOOTH_ADMIN</td> <td>允许程序发现和配对蓝牙设备</td> </tr> <tr> <td>android.permission.BRICK</td> <td>请求能够禁用设备(非常危险)</td> </tr> <tr> <td>android.permission.BROADCAST_PACKAGE_REMOVED</td> <td>允许应用发出一个程序包被移除的广播消息</td> </tr> <tr> <td>android.permission.BROADCAST_SMS</td> <td>允许应用发出一个收到短信的消息</td> </tr> <tr> <td>android.permission.BROADCAST_STICKY</td> <td>允许应用发出一个与intent相连的消息</td> </tr> <tr> <td>android.permission.BROADCAST_WAP_PUSH</td> <td>允许应用发出一个收到WAP PUSH的广播消息</td> </tr> <tr> <td>android.permission.CALL_PHONE</td> <td>允许一个程序初始化一个电话拨号,不需通过拨号用户界面需要用户确认</td> </tr> <tr> <td>android.permission.CALL_PRIVILEGED</td> <td>允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认</td> </tr> <tr> <td>android.permission.CAMERA</td> <td>请求访问使用照相设备</td> </tr> <tr> <td>android.permission.CHANGE_COMPONENT_ENABLED_STATE</td> <td>允许一个程序是否改变一个组件或其他的启用或禁用</td> </tr> <tr> <td>android.permission.CHANGE_CONFIGURATION</td> <td>允许一个程序修改当前设置,如本地化</td> </tr> <tr> <td>android.permission.CHANGE_NETWORK_STATE</td> <td>允许程序改变网络连接状态</td> </tr> <tr> <td>android.permission.CHANGE_WIFI_STATE</td> <td>允许程序改变Wi-Fi连接状态</td> </tr> <tr> <td>android.permission.CLEAR_APP_CACHE</td> <td>允许一个程序在设备中清除所有安装的程序的缓存</td> </tr> <tr> <td>android.permission.CLEAR_APP_USER_DATA</td> <td>允许一个程序清除用户数据</td> </tr> <tr> <td>android.permission.CONTROL_LOCATION_UPDATES</td> <td>允许启用禁止位置更新提示从无线模块</td> </tr> <tr> <td>android.permission.DELETE_CACHE_FILES</td> <td>允许程序删除缓存文件</td> </tr> <tr> <td>android.permission.DELETE_PACKAGES</td> <td>允许一个程序删除包</td> </tr> <tr> <td>android.permission.DEVICE_POWER</td> <td>允许访问底层电源管理</td> </tr> <tr> <td>android.permission.DIAGNOSTIC</td> <td>允许程序RW诊断资源</td> </tr> <tr> <td>android.permission.DISABLE_KEYGUARD</td> <td>允许程序禁用键盘锁</td> </tr> <tr> <td>android.permission.DUMP</td> <td>允许程序返回状态抓取信息从系统服务</td> </tr> <tr> <td>android.permission.EXPAND_STATUS_BAR</td> <td>允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序</td> </tr> <tr> <td>android.permission.FACTORY_TEST</td> <td>作为一个工厂测试程序,运行在root用户</td> </tr> <tr> <td>android.permission.FLASHLIGHT</td> <td>允许访问闪光灯,其中HTC Dream不包含闪光灯</td> </tr> <tr> <td>android.permission.FORCE_BACK</td> <td>允许应用强制执行返回操作而不论是不是最终的activity</td> </tr> <tr> <td>android.permission.GET_ACCOUNTS</td> <td>允许访问在Accounts Service中的一个帐户列表</td> </tr> <tr> <td>android.permission.GET_PACKAGE_SIZE</td> <td>允许一个程序获取任何package占用空间容量</td> </tr> <tr> <td>android.permission.GET_TASKS</td> <td>允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等</td> </tr> <tr> <td>android.permission.GLOBAL_SEARCH</td> <td>可以被内容提供者用来允许使用全程搜索他们的数据</td> </tr> <tr> <td>android.permission.HARDWARE_TEST</td> <td>允许访问硬件</td> </tr> <tr> <td>android.permission.INJECT_EVENTS</td> <td>允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流</td> </tr> <tr> <td>android.permission.INSTALL_PACKAGES</td> <td>允许一个程序安装packages</td> </tr> <tr> <td>android.permission.INTERNAL_SYSTEM_WINDOW</td> <td>允许打开窗口使用系统用户界面</td> </tr> <tr> <td>android.permission.INTERNET</td> <td>允许程序打开网络sockets</td> </tr> <tr> <td>android.permission.KILL_BACKGROUND_PROCESSES</td> <td>允许应用去呼叫killBackgroundProcesses方法</td> </tr> <tr> <td>android.permission.MANAGE_ACCOUNTS</td> <td>允许程序去管理账户列表(在账户管理者中)</td> </tr> <tr> <td>android.permission.MANAGE_APP_TOKENS</td> <td>允许程序管理(创建、催后、 z- order默认向z轴推移)程序引用在窗口管理器中</td> </tr> <tr> <td>android.permission.MASTER_CLEAR</td> <td>目前还没有明确的解释</td> </tr> <tr> <td>android.permission.MODIFY_AUDIO_SETTINGS</td> <td>允许程序修改全局音频设置</td> </tr> <tr> <td>android.permission.MODIFY_PHONE_STATE</td> <td>允许修改话机状态,如电源,人机接口等</td> </tr> <tr> <td>android.permission.MODIFY_FORMAT_FILESYSTEMS</td> <td>允许格式化可移除的存储仓库的文件系统</td> </tr> <tr> <td>android.permission.MOUNT_UNMOUNT_FILESYSTEMS</td> <td>允许挂载和反挂载文件系统可移动存储</td> </tr> <tr> <td>android.permission.PERSISTENT_ACTIVITY</td> <td>允许一个程序设置他的activities显示</td> </tr> <tr> <td>android.permission.PROCESS_OUTGOING_CALLS</td> <td>允许程序监视、修改有关播出电话</td> </tr> <tr> <td>android.permission.READ_CALENDAR</td> <td>允许程序读取用户日历数据</td> </tr> <tr> <td>android.permission.READ_CONTACTS</td> <td>允许程序读取用户联系人数据</td> </tr> <tr> <td>android.permission.READ_FRAME_BUFFER</td> <td>允许程序屏幕波或和更多常规的访问帧缓冲数据</td> </tr> <tr> <td>android.permission.READ_HISTORY_BOOKMARKS</td> <td>允许应用去读取(非写)用户浏览历史和书签</td> </tr> <tr> <td>android.permission.READ_INPUT_STATE</td> <td>允许程序返回当前按键状态</td> </tr> <tr> <td>android.permission.READ_LOGS</td> <td>允许程序读取底层系统日志文件</td> </tr> <tr> <td>android.permission.READ_OWNER_DATA</td> <td>允许程序读取所有者数据</td> </tr> <tr> <td>android.permission.READ_PHONE_STATE</td> <td>允许读取电话的状态</td> </tr> <tr> <td>android.permission.READ_SMS</td> <td>允许程序读取短信息(Allows an application to read SMS messages.)</td> </tr> <tr> <td>android.permission.READ_SYNC_SETTINGS</td> <td>允许程序读取同步设置</td> </tr> <tr> <td>android.permission.READ_SYNC_STATS</td> <td>允许程序读取同步状态</td> </tr> <tr> <td>android.permission.REBOOT</td> <td>请求能够重新启动设备</td> </tr> <tr> <td>android.permission.RECEIVE_BOOT_COMPLETED</td> <td>允许一个程序接收到 ACTION_BOOT_COMPLETED广播在系统完成启动</td> </tr> <tr> <td>android.permission.RECEIVE_MMS</td> <td>允许一个程序监控将收到MMS彩信,记录或处理</td> </tr> <tr> <td>android.permission.RECEIVE_SMS</td> <td>允许程序监控一个将收到短信息,记录或处理</td> </tr> <tr> <td>android.permission.RECEIVE_WAP_PUSH</td> <td>允许程序监控将收到WAP PUSH信息</td> </tr> <tr> <td>android.permission.RECORD_AUDIO</td> <td>允许程序录制音频</td> </tr> <tr> <td>android.permission.REORDER_TASKS</td> <td>允许程序改变Z轴排列任务</td> </tr> <tr> <td>android.permission.RESTART_PACKAGES</td> <td>允许程序重新启动其他程序(此值已废弃使用)</td> </tr> <tr> <td>android.permission.SEND_SMS</td> <td>允许程序发送SMS短信</td> </tr> <tr> <td>android.permission.SET_ACTIVITY_WATCHER</td> <td>允许程序监控或控制activities已经启动全局系统中</td> </tr> <tr> <td>android.permission.SET_ALWAYS_FINISH</td> <td>允许程序控制是否活动间接完成在处于后台时</td> </tr> <tr> <td>android.permission.SET_ANIMATION_SCALE</td> <td>修改全局信息比例</td> </tr> <tr> <td>android.permission.SET_DEBUG_APP</td> <td>配置一个程序用于调试</td> </tr> <tr> <td>android.permission.SET_ORIENTATION</td> <td>允许底层访问设置屏幕方向和实际旋转</td> </tr> <tr> <td>android.permission.SET_PREFERRED_APPLICATIONS</td> <td>允许一个程序修改列表参数PackageManager.addPackageToPreferred()和PackageManager.removePackageFromPreferred()方法</td> </tr> <tr> <td>android.permission.SET_PROCESS_LIMIT</td> <td>允许设置最大的运行进程数量</td> </tr> <tr> <td>android.permission.SET_TIME</td> <td>允许应用设置系统时间</td> </tr> <tr> <td>android.permission.SET_TIME_ZONE</td> <td>允许程序设置系统时区时间</td> </tr> <tr> <td>android.permission.SET_WALLPAPER</td> <td>允许程序设置壁纸</td> </tr> <tr> <td>android.permission.SET_WALLPAPER_HINTS</td> <td>允许程序设置壁纸hits</td> </tr> <tr> <td>android.permission.SIGNAL_PERSISTENT_PROCESSES</td> <td>允许程序请求发送信号到所有显示的进程中</td> </tr> <tr> <td>android.permission.STATUS_BAR</td> <td>允许程序打开、关闭或禁用状态栏及图标</td> </tr> <tr> <td>android.permission.SUBSCRIBED_FEEDS_READ</td> <td>允许一个程序访问订阅RSS Feed内容提供</td> </tr> <tr> <td>android.permission.SUBSCRIBED_FEEDS_WRITE</td> <td>系统暂时保留改设置,</td> </tr> <tr> <td>android.permission.SYSTEM_ALERT_WINDOW</td> <td>允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层</td> </tr> <tr> <td>android.permission.UPDATE_DEVICE_STATS</td> <td>允许应用更新设备资料信息</td> </tr> <tr> <td>android.permission.USE_CREDENTIALS</td> <td>允许应用从管理器得到授权请求</td> </tr> <tr> <td>android.permission.VIBRATE</td> <td>允许访问振动设备</td> </tr> <tr> <td>android.permission.WAKE_LOCK</td> <td>允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失</td> </tr> <tr> <td>android.permission.WRITE_APN_SETTINGS</td> <td>允许程序写入API设置</td> </tr> <tr> <td>android.permission.WRITE_CALENDAR</td> <td>允许一个程序写入但不读取用户日历数据</td> </tr> <tr> <td>android.permission.WRITE_CONTACTS</td> <td>允许程序写入但不读取用户联系人数据</td> </tr> <tr> <td>android.permission.WRITE_EXTERNAL_STORAGE</td> <td>允许应用写(非读)用户的外部存储器</td> </tr> <tr> <td>android.permission.WRITE_GSERVICES</td> <td>允许程序修改Google服务地图</td> </tr> <tr> <td>android.permission.WRITE_HISTORY_BOOKMARKS</td> <td>允许应用写(非读)用户的浏览器历史和书签</td> </tr> <tr> <td>android.permission.WRITE_OWNER_DATA</td> <td>允许一个程序写入但不读取所有者数据</td> </tr> <tr> <td>android.permission.WRITE_SECURE_SETTINGS</td> <td>允许应用写或读当前系统设置</td> </tr> <tr> <td>android.permission.WRITE_SETTINGS</td> <td>允许程序读取或写入系统设置</td> </tr> <tr> <td>android.permission.WRITE_SMS</td> <td>允许程序写短信</td> </tr> <tr> <td>android.permission.WRITE_SYNC_SETTINGS</td> <td>允许程序写入同步设置</td> </tr> </tbody> </table> ## application ## > 摘自:[http://blog.csdn.net/small\_love/article/details/6534956][http_blog.csdn.net_small_love_article_details_6534956] 包含在:`<manifest>`元素下 可以包含: \- `<activity>` \- `<activity-alias>` \- `<service>` \- `<receiver>` \- `<provider>` \- `<uses-library>` 1、**android:allowClearUserData** 是否给以用户删除用户数据的权限,如果为true应用管理者就拥有清除数据的权限;false没有。默认为true。 2、**android:allowTaskReparenting** 应用定义的activities是否可以被从启动的任务转移到和他有相同并且将被带到前台的任务。true他们可以被转移,如果为false, 他们必须和启动他们的任务保持在一起。默认为false。 3、**android:backupAgent** 实现应用的备份代理的类名,BackupAgent的子类。这个属性的名称因该是全限定类名(如,”com.example.project.MyBackupAgent”)。 但是,如果名称的首字母被设置为点号,也可以为类名(如,”.MyBackupAgent”),他将被追加到在`<manifest>`元素中定义的包名后。 没有默认值。 4、**android:debuggable** 应用是否可以使用debug,甚至运行在用户模式下。true可以,false不能。默认为false。 5、**android:description** 用户可读的,比应用标签更长、更多的应用描述。此值必须是一个引用字符串。不像标签,他不能被设置为硬编码字符串。没有默认值。 6、**android:enabled** Android系统是否可以实例化应用的组件。如果为true可以,如果为false不可以。如果为true时,每个组件的enabled属性决定了此组件 是否可用。如果为false,他重写了组件指定值,所有的组件将不还用。默认为true。 7、**android:hasCode** 应用是否包含代码。true表示包含,false表示不包含。当值为false时,在启动组件是系统不会试着加载应用的任何代码。默认为true。 8、**android:icon** 整个应用的图标,还是每个组件的默认图标。这个属性值必须被设置为drawable资源的引用。没有默认值。 9、**android:killAfterRestore** 在整型系统重置操作中,当他的设置被重置后,应用是否应该被终止。单个包的重置操作不会引起应用被关闭。整个系统的恢复操作仅代表 性的发生一次,当电话第一次被设置时。第三方应用将不会经常使用此属性。 默认值为true,意思是,当整个系统被恢复时,应用运行玩他的数据后,将会终止。 10、**android:label** 一个易读的应用标签,并且还是应用的每个组件的默认标签。这个标签应该被设置为引用字符串资源,当然他也可以像其他字符串一样在用户 接口中指定。但是为了方便,在应用开发时,可以被设置未定义字符串。 11、**android:manageSpaceActivity** 一个Activity子类的全限定名称,这个Activity可以被系统启动让用户管理此应用占有的存储空间。这个Activity也应该用`<activity>`元素声明。 12、**android:name** 为这个应用实现的Application子类的全限定名称。当应用启动时,这个类将在应用的其他组件之前被实例化。 这个子类是可选的;大多数应用不需要。在缺省时,Android使用基本Application类的实例。 13、**android:permission** 客户为了和应用交互必须设置的许可的名称。这个属性是一个便利的途径为应用的组件设置许可。他可以被组件的permission属性重写。 14、**android:persistent** 应用是否在所有时间下都保持运行。true是,false不是。默认为false。通常情况下应用不应该设置此标识。持久模式仅仅被几个系统应用指定。 15、**android:process** 为应用下的组件定一个运行进程名称。每个组件可以定义自己的进程名称通过设置自己的process属性。 在默认情况下,Android为应用创建一个进程,当应用的第一个组件需要运行时。所有的组件在同一个进程下运行。这个进程的名称和在`<manifest>` 元素设置的backage属性名相同。 通过设置这个属性在可以在其他应用中共享,你可以协调应用的组件在同一个进程中运行,但是只有两应用也共享用户ID和签订相同的证书。 如果这个属性的名称一个冒号(“:”)开始,一个新的私有的进程将被创建。如果一个进程的名称以小写字母开头,一个公共的进程将被创建。 一个公共的进程可以被其他应用共享,来减少资源的使用。 16、**android:restoreAnyVersion** 表明这个应用准备尝试恢复所有的备份数据集合,甚至如果备份数据是比当前安装的应用高的编号存储的。设置为true将允许备份管理者去尝试 恢复当版本不匹配,意思是数据冲突。要小心使用。默认为false。 17、**android:taskAffinity** 提供给应用下所有组件的类同名称,除了设置了自己的taskAffinity属性的组件。默认情况下所有的组件使用相同的affinity。Affinity的名称 和在`<manifest>`元素中设置的包名相同。 18、**android:theme** 为应用下的组件定义一个引用自样式资源的主题。个别的activities可以设置自己的主题,通过设置自己的theme属性。 ## `<activity>` ## activity是Android四大组件之一,它的属性非常多,语法如下: 摘自:[http://blog.sina.com.cn/s/blog\_48d491300100zmg0.html][http_blog.sina.com.cn_s_blog_48d491300100zmg0.html] < activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "screenSize", "smallestScreenSize"] android:enabled=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"] android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:parentActivityName="string" android:permission="string" android:process="string" android:screenOrientation=["unspecified" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "userLandscape" | "userPortrait" | "sensor" | "fullSensor" | "nosensor" | "user" | "fullUser" | "locked"] android:stateNotNeeded=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > . . . < /activity > 包含于: `<application>` 可包含: `<intent-filter>` `<meta-data>` 说明: 声明一个 Activity( Activity 子类),实现应用程序的可视化用户界面。 所有 Activity 都必须在manifest文件中用 < activity > 声明。 任何未经声明的 Activity 系统都会视而不见,且不会运行。 属性: **android:allowTaskReparenting** 当某个拥有相同 affinity 的任务即将返回前台时,Activity 是否能从启动时的任务转移至此任务中去 —“true”表示可以移动,“false”表示它必须留在启动时的任务中。 如果未设置本属性,则 < application > 元素中对应的 allowTaskReparenting 属性值将会应用于 Activity 。 默认值是“false”。 通常在启动时,Activity 与启动时的任务相关联,并在整个生命周期都位于此任务中。 利用本属性可以强行让 Activity 在当前任务不再显示时归属于另一个与其 affinity 相同的任务。 典型应用是让一个应用程序的 Activity 转移到另一个应用程序关联的主任务中去。 例如,如果某条 e-mail 信息包含了一个 Web 页的链接,点击此链接将启动一个 Activity 显示此 Web 页。 这个 Activity 是由浏览器程序定义的,但却作为 e-mail 任务的一部分被启动。 如果它重新归属于浏览器的任务,那么在下次浏览器进入前台时就会显示出来,并且会在 e-mail 任务再次回到前台时消失。 Activity 的 affinity 由 taskAffinity 属性定义。 任务的 affinity 由根 Activity 的 affinity 确定。 然而,根据规定,根 Activity 总是位于 affinity 同名的任务中。 因为以“singleTask”和“singleInstance” 模式启动的 Activity 只能位于任务的根部, 所以 Activity 的重新归属仅限于“standard”和“singleTop”启动模式。 (请参阅 launchMode 属性。) **android:alwaysRetainTaskState** 系统是否一直维持 Activity 所属任务的状态 —“true”表示是,“false”表示允许系统在特定情况下重启任务。 默认值是“false”。 本属性只对任务的根 Activity 有效,其他 Activity 都忽略本属性。 通常,在用户从主屏幕(Home Screen)重新运行应用程序时,系统有时会清理任务(清除任务栈中根 Activity 以上的所有 Activity)。 执行此操作的典型情况是:用户有段时间(比如30分钟)没有访问该任务了。 然而,一旦本属性设为“true”,则不论用户位于何处,将总是返回任务的最后状态。 举例来说,这对浏览器就很有用,Web 浏览器这类应用需要保持很多状态(诸如多个已打开的页面),用户不期望这些状态马上消失。 **android:clearTaskOnLaunch** 每次从主屏幕重新执行程序时,是否将任务中除根 Activity 以外的所有 Activity 都清除 — “true”表示总是清除至根 Activity,“false”则不清除。 默认值是“false”。 本属性只对启动新任务的 Activity(根 Activity)有效,其他 Activity 都忽略本属性。 如果此值为“true”,则每当用户再次启动任务时都会进入根 Activity, 无论之前在此任务中做过什么操作,也无论上次是用 Back 还是 Home 键离开任务的。 如果此值为“false”,那么在某些情况下也许还会清理任务(请参阅 alwaysRetainTaskState属性),但并不是每次都会执行。 例如,假设用户从主屏幕启动了 Activity P,又从 P 转到 Activity Q。 接下来用户按下了 Home 键,然后再回到 Activity P 。 通常,用户将会看到 Activity Q,因为在 P 的任务里最后操作的就是 Q。 然而,如果 P 把本属性设为“true”,则用户按下 HOME 键时所有在它之上的 Activity(本例中是Q)都会被清除,任务将进入后台。 因此用户在下次返回该任务时就只会看到 P 了。 如果本属性和 allowTaskReparenting 都设为“true”,那么所有可改变任务归属的 Activity 都会转移到具有相同 affinity 的任务中去,其余的 Activity 都将如上所述被清除。 **android:configChanges** 列出 Activity 在变化时将会自行处理的配置参数。 默认情况下,如果运行时配置发生了变化, Activity 会被关闭并重启。 但在本属性中声明配置参数将会阻止 Activity 的重启,Activity 将会保持运行,且会调用其 onConfigurationChanged()方法。 注意: 请尽量避免使用本属性,这只能用作最后的手段。 关于如何正确处理配置变化引起的重启,详情请参阅 处理运行时配置的变化。 下面列出本属性可填入的值,多个值之间用“|”分隔 — 例如“locale|navigation|orientation”。 <table> <thead> <tr> <th align="center">值</th> <th align="center">说明</th> </tr> </thead> <tbody> <tr> <td align="center">“mcc”</td> <td align="center">IMSI 移动国家代码(MCC)发生改变 — 检测到 SIM 卡并更新了 MCC。</td> </tr> <tr> <td align="center">“mnc”</td> <td align="center">IMSI移动网络代码(MNC)发生改变——检测到 SIM 卡并更新了 MNC。</td> </tr> <tr> <td align="center">“locale”</td> <td align="center">地区发生改变——用户选择了新的语言(用于文本显示)。</td> </tr> <tr> <td align="center">“touchscreen”</td> <td align="center">触摸屏发生改变(通常不可能发生)。</td> </tr> <tr> <td align="center">“keyboard”</td> <td align="center">键盘发生改变 — 比如用户插入了外接键盘。</td> </tr> <tr> <td align="center">“keyboardHidden”</td> <td align="center">键盘功能发生改变 — 比如用户让硬键盘显示出来。</td> </tr> <tr> <td align="center">“navigation”</td> <td align="center">导航手段(轨迹球/D-Pad)发生了改变(通常不可能发生)。</td> </tr> <tr> <td align="center">“screenLayout”</td> <td align="center">屏幕布局发生了改变 — 可能是由于激活了其他显示屏。</td> </tr> <tr> <td align="center">“fontScale”</td> <td align="center">字体缩放倍数发生了改变 — 用户选择了新的全局字体大小。</td> </tr> <tr> <td align="center">“uiMode”</td> <td align="center">用户界面模式发生了改变 — 可能是由于用户把设备放进桌面/车用底座里,或者是变成了夜间模式。 请参阅 UiModeManager 。自API 级别 8 开始加入。</td> </tr> <tr> <td align="center">“orientation”</td> <td align="center">屏幕方向发生了改变 — 用户旋转了设备。 注意: 如果应用程序的目标版本是 API 级别 13 以上的话(由 minSdkVersion 和 targetSdkVersion 属性定义),且须同时声明“screenSize” 参数,因为设备在横向/竖向切换时 screenSize 参数也会发生改变。</td> </tr> <tr> <td align="center">“screenSize”</td> <td align="center">当前可用的屏幕尺寸发生改变。 这表示当前可用的屏幕大小发生了改变,与当前屏幕长宽比例有关,因此这会在用户改变了纵横方向时发生。 不过,如果用户程序的目标版本是 API 级别 12 以下时, Activity 将总是自行处理本参数的变化 (即使在 Android 3.2 以上版本中运行,本参数的变化也不会导致 Activity 的重启)。自 API 级别 13 开始加入。</td> </tr> <tr> <td align="center">“smallestScreenSize”</td> <td align="center">屏幕的物理尺寸发生了改变。 这种变化与屏幕的方向无关,因此只会在屏幕真实的物理大小发生变化时才会发生,比如切换到外接显示器。 本参数的变化和 smallestWidth 参数 的变化相呼应。 不过,如果应用程序的目标版本是 API 级别 12 以下, 则 Activity 将总是自行处理本参数的变化 (即使在 Android 3.2 以上版本中运行,本参数的变化也不会导致 Activity 的重启)。自 API 级别 13 开始加入。</td> </tr> <tr> <td align="center">“layoutDirection”</td> <td align="center">Layout 的方向放生了改变。 例如,从左到右(LTR)变成了从右到左(RTL)。 自 API 级别 17 开始加入。</td> </tr> </tbody> </table> 所有以上参数的改变都会影响到应用程序引用的资源值。 因此在调用 onConfigurationChanged() 时,通常需要重新读取一下所有的资源(包括 View Layout、drawable 等等),以便正确应对参数的变化。 **android:enabled** Activity 能否被系统实例化 — “true”表示可以,“false”表示不允许。 默认值是“true”。 `<application>` 元素拥有自己的 enabled 属性,它适用于应用程序中所有的组件,包括 Activity。 系统要能够实例化 Activity , < application > 和< activity >的 enabled 属性都必须设为“true”(这也都是默认值)。 只要其中有一个是“false”, Activity 就不能被实例化。 **android:excludeFromRecents** Activity 是否排除在用户最近访问应用程序的列表(“recent apps”)之外 。 也就是说,如果本 Activity 是新任务中的根 Activity,则本属性确定了该任务是否不出现在最近应用程序列表中。 如果要排除在列表外,就设为“true”。 如果要包含在列表中,则设为“false”。 默认值是“false”。 **android:exported** Activity 是否能被其他应用程序的组件启动 —“true”表示可以,“false”表示不能。 如果设为“false”,那么 Activity 仅能被本应用程序或用户ID相同的应用程序的组件启动。 默认值取决于 Activity 是否包含 Intent 过滤器。 如果不存在过滤器,则意味着 Activity 只能通过指定准确的类名来启动。 这表示 Activity 仅限于应用程序内部使用(因为其他应用程序无法知道它的类名)。 在这种情况下,默认值是“false”。 另一方面,只要存在一个以上的过滤器,就意味着 Activity 愿意被外部启动,这时默认值就是“true”。 本属性并不是限制 Activity 向其他应用程序开放的唯一手段。 你还可以用权限来限制外部对象对 Activity 的启动(请参阅 permission 属性)。 **android:finishOnTaskLaunch** 每当用户再次启动任务时(在主屏幕上选择该任务),已存在的 Activity 实例是否应该关闭 — “true”表示需要关闭,“false”表示不要关闭。 默认值是“false”。 如果本属性和 allowTaskReparenting 都设为“true”,则本属性优先。 Activity 的 affinity 将被忽略。 Activity 将不会改变归属的任务,而是被销毁。 **android:hardwareAccelerated** 是否为本 Activity 开启硬件加速渲染功能 —“true”表示开启,“false”表示关闭。 默认值是“false”。 自 Android 3.0 开始,应用程序可以使用硬件加速的 OpenGL 渲染器来改善很多常用 2D 图形操作的性能。 当硬件加速渲染开启时,大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 内的操作都会被加速。 即使应用程序没有显式调用系统 OpenGL 库,这仍能使动画更加平滑、屏幕滚动也更加平顺、整体响应性能获得改善。 因为启用硬件加速功能需要更多的资源,应用程序将消耗更多的 RAM 。 请注意,并非所有的 OpenGL 2D 操作都会被加速。 如果开启了硬件加速渲染功能,请对应用程序进行测试,以确保渲染的正常使用。 **android:icon** 代表 Activity 的图标。 当需要在屏幕上用图标来表示 Activity 时,将会显示本图标。 例如,在桌面(launcher)窗口中显示用于启动任务的 Activity 图标。 图标常常伴随着一个文本标签(请参阅android:label属性)。 本属性必须设为对 drawable 资源的引用,资源内包含了图片的定义。 如果未设置本属性,则用作为全局设置的应用程序图标代替(请参阅 < application > 元素的 icon 属性)。 Activity 的图标 — 无论是用本属性还是用 < application > 元素的属性设置的 — 都将同时作为 Activity 所有 Intent 过滤器的缺省图标(请参阅 < intent-filter > 元素的 icon 属性。 **android:label** 供用户阅读的 Activity 的 Label。 当必须向用户标识 Activity 时,本 Label 将显示在屏幕上。 Label 常常是跟在 Activity 图标后面显示的。 如果未设置本属性,则用作为全局设置的应用程序 Label 代替(请参阅 `<application>` 元素的 label 属性)。 Activity 的 Label — 无论是用本属性还是用`<application>` 元素的属性设置的 — 都将作为 Activity 所有 Intent 过滤器的缺省 Label(请参阅 `<intent-filter>`元素的 label 属性)。 Label 应设为一个对字符串资源的引用,这样就能像其他用户界面内的字符串一样对其进行本地化。 不过,考虑到开发时的便利性,也可以直接将其设为字符串。 **android:launchMode** 指明 Activity 的启动模式。 当调用 Activity 来处理 Intent 时, Activity 的工作模式与四种标志(FLAG\_ACTIVITY\_\*常量有关,这些常量在 Intent 中定义。它们是: “standard” “singleTop” “singleTask” “singleInstance” 缺省模式是“standard”。 如下表所述,这些模式归为两组: “standard”和“singleTop”模式的 Activity 为一组, “singleTask”和“singleInstance”模式的 Activity 为另一组。 用“standard”或“singleTop”模式启动的 Activity 可以被实例化多次。 这些实例可以属于任何一个任务,并且可以处于 Activity 栈的任何位置。 典型情况下,它们被任务通过调用 startActivity() 启动并置入其中(除非 Intent 对象包含 FLAG\_ACTIVITY\_NEW\_TASK 标志,这种情况下会选取其他任务 — 请参阅 taskAffinity 属性)。 相反,“singleTask”和“singleInstance”模式的 Activity 只能启动一个任务。 它们总是位于 Activity 栈的根部。 不仅如此,设备同时只保留一个 Activity 实例 — 只启动一个任务。 “standard”和“singleTop”模式之间只有一点不同: 每次有“standard”模式 Activity 的 Intent 发生时, 都会新建一个 Activity 类的实例来响应该 Intent。 每个实例只负责处理一个 Intent 。 同理,singleTop 模式 Activity 的新实例也可以用于处理新发生的 Intent 。 不过,如果目标任务的栈顶已经存在该 Activity 的实例了,则此实例将收到这个新 Intent(在 onNewIntent() 里);而不会再创建新的实例了。 在其他情况下 — 比如目标任务中已存在“singleTop”模式的 Activity 但却不是在栈顶,或者在栈顶但却不是位于目标任务中 — 还是会创建新的实例并压入栈顶。 “singleTask”和“singleInstance”模式之间也只有一点差别: “singleTask”模式的 Activity 允许其他 Activity 加入它的任务。 它总是处于任务的根部,而其他 Activity (必须是“standard”和“singleTop”模式的 Activity )可以在它的任务中启动。 相反,“singleInstance”模式的 Activity 就不允许其他 Activity 加入它的任务,它是任务里唯一的 Activity 。 如果它启动了其他 Activity,也会被放入另一个任务中 — 类似 Intent 中设置了 FLAG\_ACTIVITY\_NEW\_TASK 标志的情况。 <table> <thead> <tr> <th align="center">使用场合</th> <th align="center">启动模式</th> <th align="center">多个实例?</th> <th align="center">注释</th> </tr> </thead> <tbody> <tr> <td align="center">正常启动大多数 Activity</td> <td align="center">“standard”</td> <td align="center">是 默认值。</td> <td align="center">系统总是在目标任务中创建 Activity 的新实例并把 Intent 传入。</td> </tr> <tr> <td align="center"></td> <td align="center">“singleTop”</td> <td align="center">有条件的</td> <td align="center">如果目标任务的栈顶已经存在本 Activity 的实例,则系统通过调用 onNewIntent() 方法传入 Intent,而不再创建 Activity 的新实例。</td> </tr> <tr> <td align="center">特殊启动模式(不建议在正常情况下使用)</td> <td align="center">“singleTask”</td> <td align="center">否</td> <td align="center">系统在一个新任务的根部创建 Activity 并传入 Intent 。 不过,如果本 Activity 的实例已经存在,系统将通过调用它的 onNewIntent() 方法来传入 Intent,而不再创建新的实例。</td> </tr> <tr> <td align="center"></td> <td align="center">“singleInstance”</td> <td align="center">否</td> <td align="center">除了系统不在实例所属任务中启动其他 Activity 以外,与“singleTask””相同。 本 Activity 总是其任务中的唯一成员。</td> </tr> </tbody> </table> 如上表所述,standard是默认模式,适用于大多数类型的 Activity 。 SingleTop 也是常用的启动模式,适用于多种 Activity 。 其他模式 — singleTask 和 singleInstance — 对于大多数应用程序而言并不适用, 因为它们的用户交互模式与其他多数应用大不相同,很可能会让用户感到陌生。 无论选择了哪种启动模式,都要确保对 Activity 的可用性进行测试,包括 Activity 启动过程、从其他 Activity 和任务中用 Back 键返回的过程。 关于启动模式及其与 Intent 标志位的关系,详情请参阅文档 任务和 Back 栈。 **android:multiprocess** 是否可以把 Activity 的实例放入启动它的组件所在的进程中。 — “true”表示可以,“false” 表示不可以。 默认值是“false”。 通常情况下, Activity 的新实例会放入应用程序指定的进程中,所以 Activity 的所有实例都运行在同一个进程中。 然而,如果本属性设为“true”, Activity 的进程就可以在多个进程中运行, 这就允许系统在任何需要用到该 Activity 的进程中(权限允许时)创建实例,尽管这也许永远都用不到。 **android:name** 实现 Activity 的类名, 也即 Activity 的子类。 本属性值应该是一个完全限定的类名(比如“com.example.project.ExtracurricularActivity”)。 不过作为简称,如果名称的首字符是句点(比如“.ExtracurricularActivity”),那么 < manifest > 元素中设置的包名会自动加到前面。 应用程序一经发布,就 不应该修改本名称 (除非设置了android:exported=”false”)。 没有默认值,必须指定本属性。 **android:noHistory** 当用户离开且屏幕上已看不到 Activity 时,是否要从栈中清除并结束(调用其 finish() 方法)它 — “true”表示需要结束,“false”表示不要结束。 默认值是“false”。 此值为“true”意味着 Activity 不会留下历史记录。 任务不会在栈中保留此 Activity ,因此用户也将无法返回它。 本属性自 API 级别 3 开始加入。 **android:parentActivityName** 定义本 Activity 的父 Activity。 本属性值必须与父 Activity 的类名一致,由 `<activity>` 元素的 android:name 属性对应。 当用户点击 ActionBar 的 Up 按钮时,系统将读取本属性以确定应该打开的 Activity 。 利用本属性,系统还可以通过 TaskStackBuilder 生成 Activity 的 back 栈。 为了支持 API 4~16 版本的系统,你也可以通过 定义了 “android.support.PARENT\_ACTIVITY” 的 `<meta-data>` 元素来声明父 Activity: `< activity android:name="com.example.app.ChildActivity" android:label="@string/title_child_activity" android:parentActivityName="com.example.myfirstapp.MainActivity" > < !-- Parent activity meta-data to support API level 4+ -- > android:name="android.support.PARENT_ACTIVITY" android:value="com.example.app.MainActivity" / >` 关于声明父 Activity 以支持 Up 导航的更多信息,请阅读 提供 Up 导航。 本属性自 API 级别 16 开始加入。 **android:permission** 要启动本 Activity 或者要用本 Activity 响应 Intent ,客户端必须拥有的权限名称。 如果 startActivity() 或 startActivityForResult() 的调用者没有被授权,那么它的 Intent 将不会传递给 Activity。 如果未设置本属性,则会把 < application > 元素的 permission 属性应用到本 Activity 上。 如果这两个属性都没有设置,那么 Activity 将不受权限保护。 关于权限的详细信息,请参阅介绍一文中的 权限 章节和另一篇文档 安全和权限。 **android:process** 将要运行 Activity 的进程名称。 通常,同一个应用程序的所有组件都会运行在应用启动时的默认进程中,你不需要用到本属性。 不过必要的时候,可以用本属性覆盖缺省的进程名称,你就可以让应用程序的多个组件分开运行于多个进程中。 如果赋予本属性的名称是以冒号(’:’)开头的,那么在必要的时候会新建一个属于应用程序的私有进程, Activity 将运行于该进程中。 如果进程名称以小写字母开头,则 Activity 将运行于一个以该名称命名的全局进程中,并赋予应有的权限。 这就允许不同应用程序的组件共享同一个进程,以|减少资源的占用。 < application > 元素的 process 属性可以为全体组件设置默认的进程名称。 **android:screenOrientation** Activity 在设备上的显示方向。 属性值可以设为以下字符串之一: <table> <thead> <tr> <th>值</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>“unspecified”</td> <td>默认值。由系统选择方向。选择的策略、进而根据特定的内容做出的选择,可能因不同的设备而各不相同。</td> </tr> <tr> <td>“behind”</td> <td>与 Activity 栈中下方相邻的 Activity 方向相同。</td> </tr> <tr> <td>“landscape”</td> <td>横向(宽度大于高度)。</td> </tr> <tr> <td>“portrait”</td> <td>纵向(高度大于宽度)。</td> </tr> <tr> <td>“reverseLandscape”</td> <td>与正常方向相反的横向。自 API 级别 9 开始加入。</td> </tr> <tr> <td>“reversePortrait”</td> <td>与正常方向相反的纵向。自 API 级别 9 开始加入。</td> </tr> <tr> <td>“sensorLandscape”</td> <td>横向,但基于设备传感器,既可能是正常横向也可能是反向横向。自 API 级别 9 开始加入。</td> </tr> <tr> <td>“sensorPortrait”</td> <td>纵向,但基于设备传感器,既可能是正常纵向也可能是反向纵向。自 API 级别 9 开始加入。</td> </tr> <tr> <td>“userLandscape”</td> <td>横向,但基于设备传感器和用户的传感器设置,既可能是正常横向也可能是反向横向。 如果用户锁定了基于传感器的旋转,则本属性与landscape作用一样,否则就与sensorLandscape一样。 自 API 级别 18 开始加入。</td> </tr> <tr> <td>“userPortrait”</td> <td>纵向,但基于设备传感器和用户的传感器设置,既可能是正常纵向也可能是反向纵向。 如果用户锁定了基于传感器的旋转,则本属性与portrait作用一样,否则就与sensorPortrait一样。 自 API 级别 18 开始加入。</td> </tr> <tr> <td>“sensor”</td> <td>由设备的方向传感器来确定方向。 显示的方向取决于用户如何放置设备,当用户旋转设备时就会发生改变。 不过,有些设备默认情况下无法旋转至全部四个方向。 要允许使用全部4个方向,请用“ “fullSensor””属性。</td> </tr> <tr> <td>“fullSensor”</td> <td>由设备的方向传感器确定为四个方向中的一个。 这类似于“sensor”,只是可以是四个方向中的任意一个,而不论设备正常情况如何 (比如,有些设备通常不会使用横向反向和纵向反向,但这个属性可以启用)。 自 API 级别 9 开始加入。</td> </tr> <tr> <td>“nosensor”</td> <td>不根据物理上的方向传感器来确定方向。 传感器将会被忽略,因此用户移动设备时显示方式不会旋转。 除此之外,系统使用与“unspecified”属性相同的原则来选择方向。</td> </tr> <tr> <td>“user”</td> <td>用户当前所用的方向。</td> </tr> <tr> <td>“fullUser”</td> <td>如果用户锁定了基于传感器的旋转,本属性与user的作用相同。 否则,与fullSensor的作用相同,允许使用四个方向。 自 API 级别 18 开始加入。</td> </tr> <tr> <td>“locked”</td> <td>锁定为当前方向,无论当前是什么方向。自 API 级别 18 开始加入。</td> </tr> </tbody> </table> > 注意: 一旦声明了横向或纵向值,则视为对 Activity 运行的方向有强制要求。 这时,此声明值将启用 Google Play 之类服务的过滤功能,于是应用程序就只能在支持所需方向的设备上使用。 比如,如果声明了“landscape”、“reverseLandscape”或者“sensorLandscape”, 则应用程序将只能在支持横向显示的设备上使用。 不过,你还可以用 < uses-feature > 元素来显式声明应用程序同时需要横向和纵向模式。 这样就会取消 Google Play(以及其他提供过滤的服务)的过滤行为, 即使设备仅支持特定的方向,系统也不会对是否安装应用程序进行控制了。 **android:stateNotNeeded** 未经保存状态, Activity 是否可被杀死并能够成功重启 —“true”表示可以不管之前的状态而被重启, “false” 表示需要保存之前的状态。 默认值是“false”。 通常,在为了腾出资源而临时关闭 Activity 之前,将会调用 onSaveInstanceState() 方法。该方法把当前 Activity 的状态存储到一个 Bundle 对象中,重新启动 Activity 时该 Bundle 对象将会被传给 onCreate() 。如果本属性设为“true”,则onSaveInstanceState() 可能就不会被调用,传入onCreate() 的将为 null 而非 Bundle — 就像第一次启动 Activity 一样。 本属性设为“true”将确保 Activity 能未经保存状态而被重启。 比如,显示主屏幕的 Activity 就利用本属性来保证由于某种原因崩溃时不会被清除。 **android:taskAffinity** 带有 affinity 的 Activity 所处的任务。 拥有相同 affinity 的 Activity 在概念上属于同一个任务(从用户的角度来看被视为同一个应用程序)。 任务的 affinity 取决于其根 Activity 的 affinity。 affinity 决定两件事情 — Activity 要重新归属于的任务(参阅 allowTaskReparenting 属性)和通过 FLAG\_ACTIVITY\_NEW\_TASK 标志启动的 Activity 所处的任务。 默认情况下,同一个应用程序中的所有 Activity 都拥有相同的 affinity。 通过设置本属性,可以把 Activity 分为不同的组,甚至可以把不同应用程序的 Activity 放入同一个任务里。 要把 Activity 设置为不带 affinity ,也即不属于任何任务,只要将本属性设为空字符串即可。 如果未设置本属性,那么 Activity 将会继承应用程序的 affinity 设置(请参阅 < application > 元素的 taskAffinity 属性)。应用程序默认的 affinity 名称是由 < manifest > 元素设置的包名称。 **android:theme** 这是一个对样式资源的引用,该资源定义了 Activity 的整体主题(theme)。 Activity 将自动适用本属性设置的主题。(请参阅 setTheme() ),并可能会触发 Activity 的“启动”动画效果(为了让 Activity 看上去更美观协调)。 如果未设置本属性,Activity 将会继承作为全局设置的应用程序的主题 — 参见 元素的 theme 属性。如果应用程序也未设置该属性,则使用默认的系统主题。 详情请参阅样式和主题开发指南。 **android:uiOptions** 用于 Activity 用户界面的附加选项。 只能是以下值之一。 <table> <thead> <tr> <th align="center">值</th> <th align="center">说明</th> </tr> </thead> <tbody> <tr> <td align="center">“none”</td> <td align="center">没有附加选项。这是默认值。</td> </tr> <tr> <td align="center">“splitActionBarWhenNarrow”</td> <td align="center">当横向空间不足时(比如手机处于纵向模式时),在屏幕底部增加一个导航条,显示 ActionBar 中的 Action 项。Action Bar 将拆分为顶部和底部导航条,而不是只在屏幕顶部显示少量 Action 项。 这样就保证了合理的可用空间,不仅可容纳 Action Bar,还可以在顶部显示导航条和标题。 菜单项不会拆开在两个导航条显示,而一定是放在一起显示的。</td> </tr> </tbody> </table> 关于 Action Bar 的更多信息,请参阅 Action Bar 开发指南。 本属性自 API 级别 14 开始引入。 **android:windowSoftInputMode** Activity 主窗口如何与显示软键盘的窗口进行交互。 本属性影响两件事情: 软键盘的状态 — 当 Activity 获得用户焦点时,是隐藏还是显示。 Activity 主窗口的调整 — 是否缩小窗口以便为软键盘腾出空间,或者在软键盘覆盖部分窗口时移动显示内容,以便显示当前的输入焦点。 本设置只能是下表所列值之一,或者是一个“state…”值与一个“adjust…”值的组合。 如果在每个组中设置多于一个的值 — 比如多个“state…”值 — 则会导致不可预知的结果。 每个值之间用竖线(|)分隔。 例如: `< activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >` 以下值将覆盖主题中的相关设置 (“stateUnspecified”和“adjustUnspecified”除外) <table> <thead> <tr> <th align="center">值</th> <th align="center">说明</th> </tr> </thead> <tbody> <tr> <td align="center">“stateUnspecified”</td> <td align="center">软键盘的状态(隐藏或显示)未指定。由系统选择合适的状态,或由主题中的设置来决定。这是软键盘的默认设置。</td> </tr> <tr> <td align="center">“stateUnchanged”</td> <td align="center">当 Activity 进入前台时,软键盘保持之前的状态不变,无论隐藏还是显示。</td> </tr> <tr> <td align="center">“stateHidden”</td> <td align="center">当用户选中本 Activity 时隐藏软键盘 — 也即用户确实是前进到本 Activity 时,而不是离开其他 Activity 回退过来时。</td> </tr> <tr> <td align="center">“stateAlwaysHidden”</td> <td align="center">当 Activity 的主窗口获得输入焦点时,总是隐藏软键盘。</td> </tr> <tr> <td align="center">“stateVisible”</td> <td align="center">一般情况下显示软键盘(当用户进入 Activity 主窗口时)。</td> </tr> <tr> <td align="center">“stateAlwaysVisible”</td> <td align="center">当用户选中本 Activity 时显示软键盘 — 也即用户确实是前进到本 Activity 时,而不是离开其他 Activity 回退过来时。</td> </tr> <tr> <td align="center">“adjustUnspecified”</td> <td align="center">未指定是否调整:Activity 主窗口是否要为软键盘留出空间而改变大小、还是在软键盘覆盖部分窗口时或移动显示内容以便显示当前输入焦点。 根据窗口中显示的内容是否具有可滚动布局的 View,系统将自动选择其中一种模式来处理。 如果是这类 View 则窗口将会缩小,因为滚动布局可以在较小的区域内显示完整的内容。这是主窗口的默认设置。</td> </tr> <tr> <td align="center">“adjustResize”</td> <td align="center">Activity 的主窗口总是会改变大小,以便为软键盘腾出屏幕空间。</td> </tr> <tr> <td align="center">“adjustPan”</td> <td align="center">Activity 的主窗口不会为软键盘留出空间而改变大小,而是自动移动窗口里的显示内容,使得当前输入焦点不会被键盘挡住,用户也一直能够看见输入的内容。 一般情况下更推荐使用 adjustResize 模式,因为用户可能需要与被遮挡内容交互,进而关闭软键盘。</td> </tr> </tbody> </table> 本属性自 API 级别 3 开始引入 引入自: noHistory 和 windowSoftInputMode 自 API 级别 3 开始引入,其余自 API 级别 1 开始引入。 参阅: `<application>` `<activity-alias>` ### `<intent-filter>` ### 我们可以看到在activity、receiver、service都包含了`<intent-filter>`标签,它有什么作用呢? Intent Filter其实就是 用来注册 Activity 、 Service 和 Broadcast Receiver 具有能在某种数据上执行一个动作的能力。 使用 Intent Filter ,应用程序组件告诉 Android ,它们能为其它程序的组件的动作请求提供服务,包括同一个程序的组 件、本地的或第三方的应用程序。 它至少要包含一个`<action>`,代表了一个动作 (1) 如果`<intent-filter>`中没有包含任何Action类型,那么无论什么Intent请求都无法和这条`<intent-filter>`匹配; (2) 反之,如果Intent请求中没有设定Action类型,那么只要`<intent-filter>`中包含有Action类型,这个Intent请求就将顺利地通过`<intent-filter>`的行为测试。 可以包含 `<category>`、`<data>`标签,分别代表类别匹配和数据匹配。 详情参考:[http://blog.csdn.net/wuwenxiang91322/article/details/7671593][http_blog.csdn.net_wuwenxiang91322_article_details_7671593] ## 更多 ## activity里面标签属性是最多的,其他标签大家可以自行查询SDK文档 [http://www.android-doc.com/guide/topics/manifest/manifest-intro.html][http_www.android-doc.com_guide_topics_manifest_manifest-intro.html] 光是一个AndroidManifest.xml文件涉及到内容就如此之多,初学者想要一下吃个胖子是不可能的事情,最好的办法是从最简单的学起,遇到不熟悉的标签属性的时候才去查询文档,笔者对里面的一些东西也不太熟悉,或者根本就没有使用过,只有当遇到一些问题的时候才会去查询,建议最好不要死记硬背,学到的时候才去查询,并且要结合具体场景,这样才能更好的掌握知识。 [20150810181310285]: /images/20220731/cb6a97d39b754ecd95f7e5f1584b61c2.png [http_blog.csdn.net_dp1234_article_details_6239933]: http://blog.csdn.net/dp1234/article/details/6239933 [http_blog.csdn.net_small_love_article_details_6534956]: http://blog.csdn.net/small_love/article/details/6534956 [http_blog.sina.com.cn_s_blog_48d491300100zmg0.html]: http://blog.sina.com.cn/s/blog_48d491300100zmg0.html [http_blog.csdn.net_wuwenxiang91322_article_details_7671593]: http://blog.csdn.net/wuwenxiang91322/article/details/7671593 [http_www.android-doc.com_guide_topics_manifest_manifest-intro.html]: http://www.android-doc.com/guide/topics/manifest/manifest-intro.html
还没有评论,来说两句吧...