Android API Guides 安卓API指导----第一部分:Introduction(介绍)
第一部分:?Introduction(介紹)
目錄包含:APP ?Fundamentals???? (應(yīng)用程序基礎(chǔ))
Device???Compatibility(設(shè)備兼容性)
System Permission???? (系統(tǒng)權(quán)限)
Introduction中包含的主要知識(shí)點(diǎn):
?、僖粋€(gè)Activity提供了一個(gè)單一屏幕的用戶界面;一個(gè)service在后臺(tái)獨(dú)立執(zhí)行相關(guān)工作;可以使用intent從一個(gè)組件到另一個(gè)組件或者啟動(dòng)一個(gè)其他的APP
②可以創(chuàng)建不同的布局文件(Layout Files)來(lái)適用不同的手機(jī)屏幕
APP Fundamentals中包含的主要知識(shí)點(diǎn):
?、倜恳粋€(gè)APP都有一個(gè)唯一的Linux user ID,系統(tǒng)為每個(gè)APP的所有文件加入權(quán)限,只有當(dāng)user ID分配了時(shí),APP才能使用它們;
?、诿總€(gè)程序都有自己?jiǎn)为?dú)的VM(虛擬機(jī)),運(yùn)行時(shí)的代碼與其他APP隔離;默認(rèn)情況下,每個(gè)APP運(yùn)行在自己的進(jìn)程中,當(dāng)系統(tǒng)啟動(dòng)這個(gè)程序時(shí),進(jìn)程被執(zhí)行,
而當(dāng)程序不再使用或者系統(tǒng)為其他APP分配內(nèi)存時(shí),進(jìn)程將被關(guān)閉。
③默認(rèn)情況下,每個(gè)APP做的工作只用訪問(wèn)組件,沒(méi)有更多,這確保了安全的運(yùn)行環(huán)境。
?、軆蓚€(gè)或多個(gè)APP之間共享數(shù)據(jù)或系統(tǒng)服務(wù)的方式:第一:分配相同的User ID,這種情況下,每個(gè)APP能夠訪問(wèn)彼此的文件,也可以共享相同的Linux進(jìn)程和相同 的VM,但APP必須擁有相同的證書。第二:使用系統(tǒng)權(quán)限。必須聲明相關(guān)的權(quán)限,才可用調(diào)用其他APP的數(shù)據(jù),For instance,讀取聯(lián)系人,發(fā)送短信,等等
?、菟姆N類型的APP 組件(component):Activitys(活動(dòng))Service(服務(wù))Content?Provide(內(nèi)容提供者)Broadcast receives(廣播接收者)
⑥AndroidManifest.xml略讀:程序的清單文件,系統(tǒng)在運(yùn)行時(shí)首先從AndroidManifest.xml文件中讀取需要的組件,必須存放在Project的根目錄
做的事情:(1)聲明用戶權(quán)限,比如上網(wǎng)和讀取聯(lián)系人權(quán)限
(2)聲明APP所能運(yùn)行的最小版本的Android系統(tǒng)( minimum API Level)
(3)聲明使用的硬件和軟件特性或應(yīng)用程序,比如相機(jī),藍(lán)牙服務(wù)等
(4)API所使用的鏈接庫(kù),比如谷歌地圖(已退出中國(guó),可以使用百度地圖)
(5)更多...(and more)
聲明組件的功能;
引用資源(APP Resource),SDK?build tool為每個(gè)資源分配一個(gè)唯一的整形ID(Integer),有各自獨(dú)立的文件夾存放,以便能夠便利的修改和應(yīng)用來(lái)適 用軟件國(guó)際化,比如(such as)string.xml,你可以加入到res/values-zh/下里面的內(nèi)容為中國(guó)語(yǔ)言,等等,系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)變語(yǔ)言字體。
為每個(gè)activity設(shè)置不同的layout來(lái)適用不同手機(jī)的方向和大小
Device Compatibility(設(shè)備兼容性)包含的主要知識(shí)點(diǎn):
主要講的是為你的APP能夠成功的運(yùn)行在各種設(shè)備上,such as 手機(jī)、平板設(shè)備(tablets)和TV,APP應(yīng)該能忍受可變性和靈活的用戶界面來(lái)適應(yīng)不同的屏幕配 置;只有Android兼容的設(shè)備,在谷歌商店中所有的APP都是Android兼容的設(shè)備,然而你必須要考慮你的APP是否符合每一個(gè)潛在的設(shè)備配置。比如橫屏和豎屏
最好使用一個(gè)APK文件來(lái)適用不同的手機(jī)特性,比如,獲取一個(gè)指南針羅盤。
<manifest ... ><uses-feature android:name="android.hardware.sensor.compass"android:required="true" />... </manifest>PS:APP會(huì)比較他與設(shè)備之間的兼容性,如果不滿足聲明的所有特性,那么你的APP不會(huì)安裝在你的設(shè)備上。當(dāng)然,你可以設(shè)置 required的屬性為false在運(yùn)行時(shí),
或者你可以通過(guò)調(diào)用hasSystemFeature()來(lái)檢測(cè)一個(gè)Feature是否可用,例如:
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {// This device does not have a compass, turn off the compass feature disableCompassFeature(); }平臺(tái)版本:Android 1.0 是API級(jí)別1,4.4是API級(jí)別19,使用<uses-sdk>的minSdkVersion 屬性指出最小版本, targetSkdVersion屬性指出最大版本
在運(yùn)行時(shí)需要檢查API Level,當(dāng)級(jí)別太低時(shí),需要降低一些特性來(lái)適應(yīng)設(shè)備
屏幕配置;
控制你的APP的商業(yè)化;
System Permissiona(系統(tǒng)權(quán)限)中的主要知識(shí)點(diǎn):
安全結(jié)構(gòu):默認(rèn)情況下,應(yīng)用程序不被允許執(zhí)行任何操作,因?yàn)樗麑?yán)重影響其他APP操作系統(tǒng)和用戶;每個(gè)APP都運(yùn)行在一個(gè)沙箱中,而且必須顯示的共享數(shù)據(jù)和資 源
應(yīng)用程序簽名(Application? Signing):所有的.apk文件都必須簽署數(shù)字簽名,包含了APP的作者
用戶ID和文件訪問(wèn):安裝文件時(shí),系統(tǒng)給每個(gè)包分配了一個(gè)獨(dú)立的用戶ID,在不同設(shè)備上,相同的包可能有不同的ID;因?yàn)椴煌陌胁煌腎D所以在一個(gè)相同的進(jìn) 程中只能運(yùn)行一個(gè)包,你可以使用? sharedUserId屬性在配置文件中的 manifest標(biāo)簽中分配相同的ID,你也可以用getSharedPreference(String , int)等方法 設(shè)置全局?jǐn)?shù)據(jù)存儲(chǔ)。
使用許可權(quán)限:默認(rèn)情況下,APP沒(méi)有任何權(quán)限,這不利于用戶體驗(yàn),所以,在配置文件中,使用一個(gè)或多個(gè)<uses-permission>標(biāo)記聲明你的應(yīng)用程序所需要的權(quán) 限,for instance:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.android.app.myapp" ><uses-permission android:name="android.permission.RECEIVE_SMS" />... </manifest>? 如果請(qǐng)求系統(tǒng)權(quán)限失敗,通常情況下將拋出 ?SecurityException異常,但也是有例外,例如 ?sendBroadcast(Intent)方法如果權(quán)限獲取失敗,將收不到消息?! ∪欢?#xff0c;幾乎所有情況下,一個(gè)權(quán)限失敗將打印日志文件;
特定的權(quán)限能夠在一些地方強(qiáng)制執(zhí)行你的程序的操作:
?、佼?dāng)系統(tǒng)調(diào)用打電話時(shí),系統(tǒng)會(huì)阻止調(diào)用APP的部分功能,(e.g 打電話時(shí),無(wú)法啟用數(shù)據(jù)連接)。
②當(dāng)啟動(dòng)一個(gè)活動(dòng)時(shí),系統(tǒng)將阻止APP從其他的APP啟動(dòng)一個(gè)活動(dòng)。
?、弁瑫r(shí)發(fā)送和接受廣播,控制誰(shuí)能收到你的廣播或者誰(shuí)能發(fā)送一個(gè)廣播給你。
?、墚?dāng)訪問(wèn)和操作一個(gè)內(nèi)容提供者(content ?provider)。
?、萁壎ɑ騿?dòng)一個(gè)服務(wù)。
聲明和執(zhí)行權(quán)限:編寫和實(shí)施你自己的權(quán)限,必須先在AndroidManifest.xml文件中聲明他們使用一個(gè)或多個(gè)<permission>標(biāo)簽,例如,APP想要控制誰(shuí)能啟動(dòng)一個(gè) 活動(dòng)可以宣布操作如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.me.app.myapp" ><permission android:name="com.me.app.myapp.permission.DEADLY_ACTIVITY"android:label="@string/permlab_deadlyActivity"android:description="@string/permdesc_deadlyActivity"android:permissionGroup="android.permission-group.COST_MONEY"android:protectionLevel="dangerous" />... </manifest>< protectionLevel >屬性是必需的,告訴系統(tǒng)要告知用戶如何應(yīng)用程序要求許可,或者是誰(shuí)允許持有許可,在相關(guān)文檔中描述。
< permissionGroup >屬性是可選的,用于幫助系統(tǒng)權(quán)限顯示給用戶。通常你會(huì)想將這個(gè)標(biāo)準(zhǔn)系統(tǒng)組(列入 android.Manifest.permission_group)或在更罕見的 情況下,由自己定義的。優(yōu)先使用現(xiàn)有的組,這樣簡(jiǎn)化了權(quán)限UI顯示給用戶。
<description>屬性,我們的約定,描述是兩句話,第一個(gè)描述許可,第二個(gè)警告用戶如果應(yīng)用程序授予許可,將發(fā)生什么壞事。
下面是標(biāo)簽(label)和描述(description)的一個(gè)例子,調(diào)用CALL_PHONE許可:
<string name="permlab_callPhone">directly call phone numbers</string><string name="permdesc_callPhone">Allows the application to callphone numbers without your intervention. Malicious applications maycause unexpected calls on your phone bill. Note that this does notallow the application to call emergency numbers.</string>使用adb -s選項(xiàng)命令來(lái)查看所有權(quán)限信息:
$ adb shell pm list permissions -s All Permissions:Network communication: view Wi-Fi state, create Bluetooth connections, full Internet access, view network stateYour location: access extra location provider commands, fine (GPS) location, mock location sources for testing, coarse (network-based) locationServices that cost you money: send SMS messages, directly call phone numbers...在配置文件中執(zhí)行權(quán)限:此部分涉及到各個(gè)組件的使用功能描敘,以后將會(huì)詳細(xì)解析,此處略。
當(dāng)發(fā)送廣播時(shí)執(zhí)行權(quán)限:同上。
URI權(quán)限:到目前為止所描述的標(biāo)準(zhǔn)許可系統(tǒng)使用內(nèi)容提供者時(shí)往往是不夠的。一個(gè)內(nèi)容提供者可能想保護(hù)自己的讀和寫權(quán)限,而其直接客戶也需要操作特定uri到其他 應(yīng)用程序。一個(gè)典型的例子是郵件附件的應(yīng)用程序。訪問(wèn)權(quán)限的郵件應(yīng)該受到保護(hù),因?yàn)檫@是敏感的用戶數(shù)據(jù)。但是,如果一個(gè)URI圖片附件給一個(gè)圖像瀏覽器,圖像 查看器將沒(méi)有權(quán)限打開附件,因?yàn)樗鼪](méi)有理由允許訪問(wèn)所有電子郵件。這個(gè)問(wèn)題的解決方案是per-URI權(quán)限:當(dāng)開始一個(gè)活動(dòng)或返回一個(gè)活動(dòng)的結(jié)果,調(diào)用者可以設(shè)置 意圖。 FLAG_GRANT_READ_URI_PERMISSION和/或Intent.FLAG_GRANT_WRITE_URI_PERMISSION。 這種授權(quán)接收活動(dòng)許可訪問(wèn)特定的數(shù)據(jù)URI的 意圖,不管是否有權(quán)限訪問(wèn)數(shù)據(jù)相對(duì)應(yīng)的內(nèi)容提供者的意圖。這種機(jī)制允許一個(gè)公共capability-style模型,用戶交互(打開附件,從列表中選擇一個(gè)聯(lián)系人,等)驅(qū)動(dòng)特 別授予的細(xì)粒度的權(quán)限。這可能是一個(gè)關(guān)鍵設(shè)施減少應(yīng)用程序所需的權(quán)限只有那些與他們的行為直接相關(guān)。然而,URI的細(xì)粒度權(quán)限確實(shí)需要一些合作內(nèi) 容提供商持有這些URI。強(qiáng)烈建議內(nèi)容提供商實(shí)現(xiàn)這個(gè)設(shè)施,并宣布他們支持通過(guò)android:grantUriPermissions屬性或< grant-uri-permissions >標(biāo)記。 更多的信息可以發(fā)現(xiàn)Context.grantUriPermission(),Context.revokeUriPermission(),和Context.checkUriPermission()方法。
?
總結(jié):這部分的內(nèi)容不是很重要,只是起了個(gè)介紹Android的作用,接下來(lái)會(huì)詳細(xì)介紹Android的其他目錄及指導(dǎo)。
?
?
新單詞:
configuration:配置; compile:vt,編譯;配置;suffix:后綴;principle?of?least privilege:最小特權(quán)原理;regard:關(guān)于;?incorporate:包含吸收;?restrict:限制
??directly:一...就,立刻馬上;
轉(zhuǎn)載于:https://www.cnblogs.com/liter7/p/4735012.html
總結(jié)
以上是生活随笔為你收集整理的Android API Guides 安卓API指导----第一部分:Introduction(介绍)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 重集合中找出最相近的一个数字
- 下一篇: (Android Studio)Acti