❶ android許可權機制
我們知道 Android 應用程序是沙箱隔離的,每個應用都有一個只有自己具有讀寫許可權的專用數據目錄。但是如果應用要訪問別人的組件或者一些設備上全局可訪問的資源,這時候許可權機制就能系統化地規范並強制各類應用程序的行為准則。
Android 安全性概覽
在 Android 中,一個許可權,本質上是一個字元串,一個可以表示執行特定操作的能力的字元串。比如說:訪問 SD 卡的能力,訪問通訊錄的能力,啟動或訪問一個第三方應用中的組件的能力。 許可權被授予了之後,首先會在內存和本地中有記錄,這在調用系統binder服務和其他應用組件時做鑒權依據,比如調用系統binder服務時會通過Binder.getCallingUid()拿到調用者的Uid,而Uid一般都是與應用包名一一對應的,再拿這個Uid到PMS里去查這個應用對應的許可權。 其次會按被授予的許可權將應用分到某個組。 可以參考 https://www.jianshu.com/p/a17c8bed79d9
自定義許可權的應用場景在於限制其它應用對本應用四大組件的訪問。具體用法可以參考 https://www.cnblogs.com/aimqqroad-13/p/8927179.html
pm list permissions -f 命令可以詳細查看 Android 所有預定義的許可權。
更詳細的許可權信息參考 https://developer.android.com/reference/android/Manifest.permission?hl=zh-cn#WRITE_EXTERNAL_STORAGE
可以看到一個許可權的信息包括:定義的包名、標簽、描述、 許可權組 和 保護級別 。
許可權根據設備的功能或特性分為多個組。如果應用已在相同許可權組中被授予另一危險許可權,系統將立即授予該許可權,如READ_CONTACTS和WRITE_CONTACTS。
SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 由於其特殊性,其申請方式與其它許可權都不同。
其授予流程如下:
(關於 AppOpsManager 是什麼可以參考: https://segmentfault.com/a/1190000009214983 )
這里簡要分析下ActivityCompat#requestPermissions的流程:
更詳細的許可權授予流程源碼分析可以參考: https://segmentfault.com/a/1190000009214983
普通許可權: 清單文件中聲明即可。
危險許可權: 方式一: pm grant application_package android.permission.CHANGE_CONFIGURATION 方式二:appops set application_package permission_num 0/1
appops可以授予的許可權參考 android.app.AppOpsManager 中的聲明
系統簽名許可權: 方式一:將app遷移到system/priv-app目錄中。 方式二:看不懂,參考 https://blog.csdn.net/abcd_3344_abcd/article/details/50698759
android 4.4 訪問sd卡需要申請許可權。 您的應用在 Android 4.4 上運行時無法讀取外部存儲空間上的共享文件,除非您的應用具有 READ_EXTERNAL_STORAGE 許可權。也就是說,沒有此許可權,您無法再訪問 () 返回的目錄中的文件。但是,如果您僅需要訪問 getExternalFilesDir() 提供的您的應用特有目錄,那麼,您不需要 READ_EXTERNAL_STORAGE `許可權。
android 6.0 運行時許可權。 此版本引入了一種新的許可權模式,如今,用戶可直接在運行時管理應用許可權。這種模式讓用戶能夠更好地了解和控制許可權,同時為應用開發者精簡了安裝和自動更新過程。用戶可為所安裝的各個應用分別授予或撤銷許可權。 對於以 Android 6.0(API 級別 23)或更高版本為目標平台的應用,請務必在運行時檢查和請求許可權。要確定您的應用是否已被授予許可權,請調用新增的 checkSelfPermission() 方法。要請求許可權,請調用新增的 requestPermissions() 方法。即使您的應用並不以 Android 6.0(API 級別 23)為目標平台,您也應該在新許可權模式下測試您的應用。 如需了解有關在您的應用中支持新許可權模式的詳情,請參閱 使用系統許可權 。如需了解有關如何評估新模式對應用的影響的提示,請參閱 許可權最佳做法 。
android 7.+ 應用間共享文件要使用FileProvider。 對於面向 Android 7.0 的應用,Android 框架執行的 StrictMode API 政策禁止在您的應用外部公開 file://URI。如果一項包含文件 URI 的 intent 離開您的應用,則應用出現故障,並出現 FileUriExposedException 異常。 要在應用間共享文件,您應發送一項 content:// URI,並授予 URI 臨時訪問許可權。進行此授權的最簡單方式是使用 FileProvider `類。如需了解有關許可權和共享文件的詳細信息,請參閱 共享文件 。
android 8.+
同一許可權組的許可權在被授予了之後也需要顯式的再申請一次。
在 Android 8.0 之前,如果應用在運行時請求許可權並且被授予該許可權,系統會錯誤地將屬於同一許可權組並且在清單中注冊的其他許可權也一起授予應用。 對於針對 Android 8.0 的應用,此行為已被糾正。系統只會授予應用明確請求的許可權。然而,一旦用戶為應用授予某個許可權,則所有後續對該許可權組中許可權的請求都將被自動批准。 例如,假設某個應用在其清單中列出 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 。應用請求 READ_EXTERNAL_STORAGE ,並且用戶授予了該許可權。如果該應用針對的是 API 級別 24 或更低級別,系統還會同時授予 WRITE_EXTERNAL_STORAGE ,因為該許可權也屬於同一 STORAGE 許可權組並且也在清單中注冊過。如果該應用針對的是 Android 8.0,則系統此時僅會授予 READ_EXTERNAL_STORAGE ;不過,如果該應用後來又請求 WRITE_EXTERNAL_STORAGE ,則系統會立即授予該許可權,而不會提示用戶。
android 9
隱私許可權變更。
為了增強用戶隱私,Android 9 引入了若干行為變更,如限制後台應用訪問設備感測器、限制通過 Wi-Fi 掃描檢索到的信息,以及與通話、手機狀態和 Wi-Fi 掃描相關的新許可權規則和許可權組。
android 10
隱私權變更。
外部存儲訪問許可權范圍限定為應用文件和媒體,在後台運行時訪問設備位置信息需要許可權,針對從後台啟動 Activity 的限制等。
android 11
隱私許可權變更。
更詳細的版本變更請參考 https://developer.android.com/preview/privacy?hl=zh-cn
❷ android應用和ios的區別是什麼
最大的區別是android應用是開源的,二者的區別如下:
1、兩者運行機制不同:IOS採用的是沙盒運行機制,安卓採用的是虛擬機運行機制。
2、兩者後台制度不同:IOS中任何第三方程序都不能在後台運行;安卓中任何程序都能在後台運行,直到沒有內存才會關閉。
3、IOS中用於UI指令許可權最高,安卓中數據處理指令許可權最高。
iphone沙盒機制解釋:應用程序位於文件系統的嚴格限制部分,程序不能直接訪問其他應用程序。以殺毒軟體中的沙盒技術解釋一下。「沙盒」技術是發現可疑行為後讓程序繼續運行,當發現的確是病毒時才會終止。「沙盒」技術的實踐運用流程是:讓疑似病毒文件的可疑行為在虛擬的「沙盒」里充分表演,「沙盒」會記下它的每一個動作;當疑似病毒充分暴露了其病毒屬性後,「沙盒」就會執行「回滾」機制:將病毒的痕跡和動作抹去,恢復系統到正常狀態。
安卓虛擬機機制解釋:android本身不是為觸摸屏打造的,所以所有的應用都是運行在一個虛擬的環境中,由底層傳輸數據到虛擬機中,再由虛擬機傳遞給用戶UI,任何程序都就可以輕松訪問其他程序文件。
❸ android與ios系統有什麼區別
在過去,Android和iOS這兩款操作系
統主要是以功能和精緻程度來彼此區分
的:Android的功能多樣性和個性化程度
要高於iOS,而iOS則具備更高的精緻程度。
但隨著iOS 8和Android 5.0 Lollipop
的發布,一切都發生了改變。iOS 8的功能已經不輸Android,而Lollipop新的材料設計也達到了和iOS比肩的精緻程度。
由此我們似乎可以推斷,iOS和Android現在比以往任何時候都更加相似——從表面上看,情況的確如此。但兩款操作系統所提供的總體體驗已經變得非常不同,這也是最為有趣的地方。
可以這么說,iOS和Android比以往任
何時候都要更加相似,同時也更加不同。
因此,我們也應該去檢驗這兩個平台的相似和不同之處。
功能在最新的升級當中,蘋果讓自己的操作系統在功能上趕上了Android。在多年的時間里,iOS用戶想要擁有能夠更好彼此交流的應用、系統小部件、還有第三方輸入法。蘋果終於帶來了這些功能,雖然是以自己獨特的方式。
與此同時,Android採納了相似的UI
範式,以及iOS更好的通知系統。
雖然兩款系統因此背負了抄襲的罵
名,但筆者認為,這對於所有人都是件好事。
雖然兩個平台依然存在各自獨有的功
能,但這些區別更多的是哲學觀念上的。
就拿它們處理默認應用的方式來說。在Android當中,你可以使用任意瀏覽器、
郵件客戶端或聊天客戶端來取代系統的內置工具。而在iOS平台,你可以安裝這些額外的應用,甚至是能和這些應用進行交談的程序。但蘋果的核心應用永遠都會作為系統默認選項存在。換句話說,這並非是iOS不能擁有和Android一樣的功能(反之亦然),而是它們選擇如此。
除此之外,應用的世界也在演變。如
果非要選擇,和筆者交流過的大多數開發者還是會有些選擇iOS。在兩個平台上發布應用並保持功能的一致性已經變成了一種「禮節需要」。
應用曾經是Android和iOS最大的區別,但隨著雙方越來越像,實際的系統功能也達到了近乎平等,在兩個系統之間做出選擇的理由也發生了改變。
外觀和感覺在材料設計的幫助下,Android Lollipop在設計角度上成為了谷歌最具野心的一個系統版本。
在這些年裡,原生Android的外觀發生了不小的改變。曾經那個黑莓/Windows Mobile的競爭者如今已經脫變
成了一款以觸控為中心的操作系統,這樣的發展方向也被證明是正確的。
但Android所面臨的問題是,大多數Android用戶所獲得的都並不是原生的谷歌體驗,他們所使用的可能是三星的TouchWiz、HTC的Sense、或是小米的MIUI。
這讓人覺得很遺憾,因為Lollipop是
一個非常精緻的系統版本,透明化、圖層、陰影和紋理都是谷歌所精心設計的。
不過好消息是,谷歌正在和主要OEM商合作,來把材料設計的元素帶到這些定製界面當中。雖然最終效果如何還很難說,但至少谷歌考慮到了這一點。
讓所有人都獲得相同的體驗是非常重
要的,因為在這么多年的時間里,Android似乎是第一次在用戶界面和用戶體驗上面擁有了真正清晰的想法。更為重要的是,Lollipop的體驗還延伸到了平板、手機、電視和可穿戴領域。無論是Android Wear中的卡片的圖層和紋理,還是Android TV中的用色和總體設計語言,這一切看上去終於像是屬於同一個產品系列的了。
在很長一段時間里,蘋果對於這個問
題的處理一直非常出色。此外,在OS XYosemite當中,蘋果以一種既不臃腫也不奇怪的方式讓自己所有的平台都享受到了用戶界面和用戶體驗的精華部分。
至於iOS 8本身,它更像是對iOS 7進
行的一次微調。蘋果花了1年的時間來在其他的產品(比如最明顯的OS XYosemite)上來推行這些改變。從他們對於Apple Watch的短暫展示中也可以看出,蘋果的可穿戴設計當中也具備著相同的設計元素。
從視覺上看,兩款操作系統在設計語
言和用色上都存在相似之處,但它們之間的區別依然非常大。這些不同之處主要體現在應用內的導航和返回主屏幕的方式上。
Home鍵是蘋果的標志性元素,導航
主要發生在應用內,大多數的導航方式通常存在於屏幕底部。而Android中的導航是通過屏幕底部的三枚虛擬按鍵來實現的,雖然Lollipop對這些按鍵的圖標進行了改變,但核心方式依然相同。體驗當然,iOS 8和Lollipop最大的區別是使用體驗。
在iOS和蘋果整體的操作系統身上,筆者的最大感受是蘋果想要幫助用戶盡可能簡單地完成自己的任務。這一點在iOS8的部分功能上最為明顯,包括新的小部件支持、連續互通和Handoff。只需在屏幕上向下滑動,你就能夠看到天氣、股票或進行計算。而把郵件或網頁的進度從手機搬到Mac或iPad上也非常簡單。
Android的體驗有點不同。