android学习笔记30——AndroidMainfest.xml
Manifest.xml文件的職責:
指定APP的包名.
聲明四大組件, 以及啟動方式.
指定APP運行的進程名稱.
指定APP權限.
指定最小API版本.
指定需要連接的庫.
Manifest.xml的格式:
<?xml version="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 />
<path-permission />
</provider>
<uses-library />
</application>
</manifest>
全部標簽:
<action>
<activity>
<activity-alias> ==》activity-alias是android里為了重復使用Activity而設計的。
<application>
<category>
<data>
<grant-uri-permission>
<instrumentation>
==》Instrumentation和Activity有點類似,只不過Activity是需要一個界面的,而Instrumentation并不是這樣的,我們可以將它理解為一種沒有圖形界面的,具有啟動能力的,用于監控其他類(用Target Package聲明)的工具類。
<intent-filter>
<manifest>
<meta-data>
<permission>
<permission-group>
<permission-tree>
<provider>
<receiver>
<service>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-library>
<uses-permission>
<uses-sdk>
Manifest.xml文件規則:
1.標簽: 只有<manifest>和<application>是必須的, 它們倆只能被聲明一次. 其余都是可選標簽.
在同一級別的標簽沒有先后順序的要求, 不過這里有一個例外:<activity-alias>必須緊跟<activity>.
2.屬性: 理論上講所有的屬性都是可選的. 除了<application>標簽外, 其他標簽的屬性都以android:前綴開頭.
3.聲明類名: 很多標簽都對應一個Java的對象, 包括<application>以及四大組件.
Android規定使用name屬性來為標簽指定一個Java類。
比如下面是為一個Service指定類名:
<manifest . . . >
<application . . . >
<service android:name="com.example.project.SecretService" . . . >
. . .
</service>
. . .
</application>
</manifest>
如果類所在名跟包名一樣, 則可以簡寫成一個”.”, 比如:
<manifest package="com.example.project" . . . >
<application . . . >
<service android:name=".SecretService" . . . >
. . .
</service>
. . .
</application>
</manifest>
啟動一個組件的時候, Android會創建一個被指定的子類的實例, 如果沒指定的話, 那么Android會創建一個組件基類的實例.
4.單個屬性多個值: 有些屬性可以接收多個值, 通常我們會這樣使用重復的屬性:
<intent-filter . . . >
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.INSERT" />
<action android:name="android.intent.action.DELETE" />
. . .
</intent-filter>
5.引用資源: 有些屬性值需要我們引用資源文件, 跟之前描述資源文件的用法一樣,
只需要使用@[package:]type:name格式來引用資源即可:<activity android:icon="@drawable/smallPic" . . . >
6.使用字符串: 當屬性值是字符串的時候, 使用轉義字符必須加”\\”, 比如”\\n”用于換行, “\\uxxxx”用于Unicode
Manifest.xml的文件特性:
1.Intent Filters:
Intent是啟動Android組件的重要工具,Intent意為”意圖”, 是啟動組件的”信使”, 它包括需要傳送的數據(data), 處理action的組件的種類(category)和其它的相關說明. Android根據Intent來啟動一個對應的組件, 然后將Intent傳遞給它.
每個組件可以包含多個<Intentfilter>, 它告訴Android自己想要接收的Intent長啥樣. 當一個Intent明確指定了組件名稱的時候(顯示啟動activity), Intent filter就不再發揮作用. 但是對于不指定名字的Intent(隱式啟動activity),那么它只能啟動符合的Intent filter的組件.
2.圖標和標簽:
很多標簽都有圖標(icon)和標簽(label)屬性, 它們分別指定了小圖標和文字標簽給用戶. 有些還支持更長的description屬性可以顯示更長的文字信息. 如果一個標簽包含了icon和label屬性, 那么它們會成為子標簽的默認屬性. 所以只要設置了<application>的icon和label屬性, 那么它們會成為application內所有組件的默認icon和label屬性.
3.權限(permission): 權限是限制APP訪問指定數據的約束性標簽. 它用來指定APP擁有的權限. 是一串字符串, 如:
android.permission.CALL_EMERGENCY_NUMBERS ==>撥打緊急號碼
android.permission.READ_OWNER_DATA ==>允許程序讀取所有者的數據
android.permission.SET_WALLPAPER ==>設置壁紙
android.permission.DEVICE_POWER ==>設備電源權限
上述四個分別對應撥打緊急號碼, 允許程序讀取所有者的數據, 設置壁紙, 設備電源權限. 如果APP想訪問某個被permission保護的權限, 那么必須用<user-permission>標簽申請該權限. 在安裝的時候, 系統將會檢查這些權限, 并且將敏感權限提示給用戶,由用戶決定是否安裝.
一款APP也可以通過權限管理來保護自己的組件, 可以使用Android提供的permissions(在android.Manifest.permission中列出), 也可以使用其它APP定義的permission,還可以自己定義.
定義一個permission的代碼如下:
<manifest . . . >
<permission android:name="com.example.project.DEBIT_ACCT" . . . />
<uses-permission android:name="com.example.project.DEBIT_ACCT" />
. . .
<application . . .>
<activity android:name="com.example.project.FreneticActivity"
android:permission="com.example.project.DEBIT_ACCT"
. . . >
. . .
</activity>
</application>
</manifest>
這里需要注意的是:
所有需要訪問被DEBIT_ACCT保護的Activity的組件, 都得使用<user-permission>來聲明該權限, 就算在自己的APP內部也是如此.
<permission-tree>標簽用于為同一組permission聲明命名空間.<permission-group>則為一組permission定義一個label. 它只影響權限向用戶展示的方式. <permission-group>僅僅用于給出一個組的名字, 并不指定權限是如何分組的.決定permission如何分組的是<permission>中的permissionGroup屬性.
4.庫(Libraries):
每個Android APP都會與Android默認的基礎庫連接, 包括基礎的類, 比如Activity, Service, Intent, Button, View等. 然而有些時候我們也需要為我們的APP連接外部的庫, 這些庫需要<uses-library>標簽指定.
?
轉載于:https://www.cnblogs.com/YYkun/p/5833182.html
總結
以上是生活随笔為你收集整理的android学习笔记30——AndroidMainfest.xml的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NDTTS-II变压器综合试验系统
- 下一篇: android手机录屏多少fps,如何在