第二章、系統介紹
2.1 Android Permission 介紹
Android 系統下,為了避免錯誤或是惡意的濫用,app 能取得的手機資源 是有限制的,有一部分的功能是被限制,只有 system 可以使用(例如 SIM 卡的 操作),沒有提供任何的 API 給外部的 app 使用,另外一部分是只能由電信公 司,或是手機商預先安裝好的程式才能使用,最後才是可以供一般 app 使用 的功能,而這些功能是由一個 permission 機制所保護。
Permission 保護的 API:
Camera functions
Location data (GPS)
Bluetooth functions
Telephony functions
SMS/MMS functions
Network/data connections
這些功能被限制只能經由 OS 的 API 才能利用,而要利用這些功能的程式 必須要有相對應的 permission。在程式安裝前,必須要提示使用者所有 app 可 能會利用到的 permission,由使用者去決定是否要安裝,如果答應安裝,則視 同答應給予這些 permission。
Android 內定的 permission 很多,至 API level 14 為止共有 122 個,其中主 要分成三個部分:
1. 關於個人資料保護(ex. contacts,account),若是任意授權給 app 使用,可 能會造成隱私洩漏問題。
2. 關於系統設定(ex. wifi,bluetooth),app 取得這些權限可能可以竄改系統 設定造成當機或是消耗手機電量,減少使用時間。 判斷是否要給予 permission,內建的 permission 數量繁多且功能繁雜,因此我 們希望能提出一些建議幫助使用者判斷,讓使用者可以清楚的了解安裝此 app 會有甚麼風險,再決定是否安裝 app。
9
2.2 AndroidManifest.xml 文件結構介紹
在 Android 執行一個 app 之前,必須先知道該 app 有哪些元件 (Activity、
Service 等 ) , 這 些 元 件 的 描 述 被 放 在 AndroidManifest.xml 檔 案 中 。 AndroidManifest.xml 會連同執行碼與相關資源等一同打包到附檔名為 apk 的 專案檔中。(往後提到 apk 是指檔案本身,app 則為應用程式。)
上面是一個 AndroidManifest.xml 的基本架構,下面對每一個部份做介紹:
uses-permission
請求你的 app 運作所需賦予 permission。這個部分就是我們需要的 permission 資訊。
permission
定義使用這個 app 提供的資源所需要的 permission。
application
一個 AndroidManifest.xml 中必須含有一個 Application 標籤,這個標籤聲
圖 8 AndroidManifest.xml 基本架構
10
明了每一個應用程序的組件及其屬性(如 icon, label, permission 等)
activity
activity 是用來與使用者互動的主要工具。當用戶打開一個應用 程序的起始頁面時就是一個 activity,大部分被使用到的其他頁面也 由不同的 activity 所實現並聲明在另外的 activity 標記中。
另外,爲了支援運行時系統查找你的 activity,你能包含一個或多個
<intent-filter>元素來描述你 activity 所支援的操作。
receiver
intentReceive 能使得 app 收到數據的改變或者發生的操作,然後 做出反應,即使它當前不在運行。利用 activity 標記,你能選擇地包 含一個或多個 receiver 所支持的<intent-filter>元素。
service
service 是能在背景運行任意時間的組件。利用 activity 標記,你 能選擇性地包含一個或多個 receiver 所支持的<intent-filter>元素。
provider
ContentProvider 是用來管理數據並發佈給其他應用程序使用的元 件。
2.3 使用工具介紹 2.3.1 Android SDK & ADT
Android SDK 將開發 Android 程式所需要的所有元件都包含在裡面,裡面 包含有:
SDK Tools:包含了開發程式需要的 Debug 工具,測試工具,是最基本必 備的元件。
SDK Platform-tools:含有跟電腦連接測試的工具 adb,以及讀取 app 資訊 的元件 aapt,這些在後面我們將會用到。
SDK Platform:裡面有 Android 所提供的 API。
System Images:提供了各種版本的原生 system OS 映像檔(Image)可供我們 使用
還有其他 document、Samples for SDK、Sources for Android SDK 等等資源,
是開發程式過程中需要的資料。此外我們還需要 Android Development Tools (ADT),這是一個 Eclipse 的 plugin,裡面包含介面化的程式設計空間,下面的 DDMS 就是 ADT 提供的 tools 其中之一。
11
2.3.2 DDMS
DDMS 的全名是 Dalvik Debug Monitor Service,它為我們提供例如:為測 試設備擷取畫面,針對特定的進程查看正在運行的程式以及堆(stack)信息、
Logcat、廣播狀態信息、模擬電話接聽以及接收 SMS、虛擬地理坐標等等。DDMS 對 Emulator 和外接測試機有同等效用。如果系統檢測到它們(VM)同時運行,
那麼 DDMS 將會默認指向 Emulator。
DDMS 有整合在 Eclipse 的 ADT 中,也有包含在 Android 的 SDK 中,所以 有兩個方法可以啟動它:
From Eclipse: Window > Open Perspective > Other... > DDMS.
From the command line:
Type ddms (or ./ddms on Mac/Linux) from the tools/ directory.
DDMS 有提供一個 File Explorer,可以讓我們對手機或是 Emulator 中的檔 案進行操作,我們將利用這個功能從手機中取得從 Google Play 下載下來的 app。
2.3.3 apktool
APK 是 Android Package 的縮寫,即 Android application package 文件或 Android 安裝包。每個要安裝到 Android 平台的應用程式都要被編譯打包為一 個單獨的文件,副檔名為 apk。APK 文件是用專業軟體 eclipse 編譯生成的文件 SVM 的模組,我們只需要將資料整理成 Attribute-Relation File Format (ARFF)格 式,就可以幫助我們算出要的結果。
12
2.4 實作系統介紹
首先,我們從 Google Play 中下載 app,我們挑選熱門下載且下載次數較 多,評價較高的 app 來建立我們的資料庫,一方面可以確保下載軟體是經由 大量使用者認可的安全軟體外,另一方面也能確保分類的正確。下載後的 app 經過解壓縮掃毒後,讀取所需的 permission 建立資料庫,提供我們建議使用 者的依據。當使用者想要安裝一個新的 app 時,可以將 app 所要求的 permission 列表以及 app 的類別(type)提供給我們,經由我們建立的資料庫,提供給使用 者有用的訊息,幫助使用者輕鬆判斷是否要安裝 app,而不需要將軟體上傳,
或是具備 Android 系統設定或是專業詞彙的知識。
圖 9 實作系統架構圖
13