Android 開發基礎¶
在做 Android 安全之前,我們應該儘可能地瞭解 Android 開發的基本流程。
基礎知識¶
依次閱讀以下書籍,由淺入深地瞭解 Android 基本開發知識
- 第一行代碼,閱讀完前七章即可
- JNI/NDK 開發,目前尚未找到一本相關合適的指南。
- Android 編程權威指南(可選)
- Android 高級進階(可選)
在學習的過程中,個人覺得需要着重瞭解 Android 開發中如下知識
- Android 系統架構
- 基本源文件架構
- 基本開發方式與代碼編寫慣例,瞭解常見代碼的意思。
- 瞭解 xml 等一些配置資源的文件格式。
一定要搭好基本的 Android 開發環境!!!!!
- java
- ddms
- ndk
- sdk,多安裝幾個版本的 sdk,5.0-8.0
Apk 打包流程¶
當編寫完 App 相關的代碼後,我們的最後一步就是將 App 中所有使用到的資源文件進行打包,打包流程如下圖(http://androidsrc.net/android-app-build-overview/)所示:
具體的操作如下
- 使用 aapt( The Android Asset Packing Tool ) 對資源文件進行打包,生成 R.java 文件。
- 如果項目中使用到了 AIDL(Android Interface Definition Language)提供的服務,則需要使用 AIDL 工具解析 AIDL 接口文件生成相應的 Java 代碼。
- 使用 javac 將 R.java 和 AIDL 文件編譯爲 .class 文件。
- 使用 dx 工具將 class 和第三方的 library 轉換爲 dex 文件。
- 利用 apkbuilder 將第一步編譯後的資源、第四步生成的 .dex 文件,以及一些其它資源打包到 APK 文件中。
- 這一部主要是對 APK 進行簽名。可以分爲兩種情況,如果我們是要發佈 App,那就採用 RealeaseKeystore 簽名;反之,我們如果只是想要對 App 進行調試,那就使用 debug.keystore 簽名。
- 在發佈正式版之前,我們需要將 APK 包中資源文件距離文件的起始偏移修改爲 4 字節的整數倍數,這樣,在之後運行 App 的時候,速度會比較快。
Apk 文件結構¶
APK 文件也是一種 ZIP 文件。因此,我們可以使用解壓 zip 的工具來對其進行解壓。一個典型的 APK 文件的結構如下圖所示。其中,關於每一部分的介紹如下
-
AndroidManifest.xml
- 該文件主要用於聲明應用程序的名稱,組件,權限等基本信息。
-
class.dex
- 該文件是 dalvik 虛擬機對應的可執行文件,包含應用程序的可執行代碼。
- resource.arsc
- 該文件主要是應用程序編譯後的二進制資源以及資源位置與資源 id 之間的映射關係,如字符串。
- assets
- 該文件夾一般用於包含應用程序的原始資源文件,例如字體和音樂文件。程序在運行的時候,可以通過API 獲取這些信息。
- lib/
- lib目錄下主要用於存儲通過 JNI(Java Native Interface)機制使用的本地庫文件,並且會按照其支持的架構,分別創建對應的子目錄。
- res/
- 該目錄主要包含了 Android 應用引用的資源,並且會按照資源類型進行存儲,如圖片,動畫,菜單等。主要還有一個 value 文件夾,包含了各類屬性資源
- colors.xml→顏色資源
- dimens.xml--->尺寸資源
- strings--->字符串資源
- styles.xml→樣式資源
- META-INF/
- 類似於 JAR 文件,APK 文件中也包含了 META-INF 目錄,用於存放代碼簽名等文件,以便於用來確保 APK 文件不會被人隨意修改。