Android 的程式安裝檔在編譯的過程中會打包成副檔名apk的檔案,其中包含足夠的資訊及資料以便可以在實體裝置或模擬器上使用。Android apk 檔其實就是個 zip 壓縮檔,所以只要在副檔名最後加上 .zip 使它變成一個 zip 壓縮檔即可開啟。主要有五個部分﹕
(1)META-INF 裏面放了簽名及憑證
(2)res 顧名思義,就是資源檔。如圖片、layout設定。
(3)AndroidManifest.xml 記錄應用程式的目的、權限等說明。
(4)classes.dex 由.class檔轉成Dalvik byte code
(5)resoures.arsc 多國字串
下圖是由Android developers抓來的,可以說明apk的組成要素:
Build Process
下圖可以清楚表明怎麼去編譯apk,綠色圈圈代表的是工具,其中apkbuilder 在 Android 3.0 SDK己經改為com.android.sdklib.build.ApkBuilder
Decode process
若要一般的資訊,aapt 工具就可以達到,如想查看某個apk的AndroidManifest.xml
$ aapt dump xmltree SpareParts.apk AndroidManifest.xml
N: android=http://schemas.android.com/apk/res/android
E: manifest (line=17)
A: android:versionCode(0x0101021b)=(type 0x10)0x7
A: android:versionName(0x0101021c)="2.1-update1" (Raw: "2.1-update1")
A: package="com.android.spare_parts" (Raw: "com.android.spare_parts")
E: uses-sdk (line=0)
A: android:minSdkVersion(0x0101020c)=(type 0x10)0x7
A: android:targetSdkVersion(0x01010270)=(type 0x10)0x7
E: uses-permission (line=19)
A: android:name(0x01010003)="android.permission.SET_ANIMATION_SCALE" (Raw: "android.permission.SET_ANIMATION_SCALE")
E: uses-permission (line=20)
A: android:name(0x01010003)="android.permission.CHANGE_CONFIGURATION" (Raw: "android.permission.CHANGE_CONFIGURATION")
E: uses-permission (line=21)
A: android:name(0x01010003)="android.permission.WRITE_SETTINGS" (Raw: "android.permission.WRITE_SETTINGS")
E: application (line=23)
A: android:label(0x01010001)=@0x7f060000
A: android:icon(0x01010002)=@0x7f020000
E: activity (line=26)
A: android:name(0x01010003)="SpareParts" (Raw: "SpareParts")
E: intent-filter (line=27)
E: action (line=28)
A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
E: category (line=29)
A: android:name(0x01010003)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT")
E: category (line=30)
A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
(1) apktool http://code.google.com/p/android-apktool/
apktool是一套反編譯apk,同時又可以修改後再編譯回去先前所說apk五大組成部分。它會把classes.dex拆解成數個.smali檔,其本上己經可以一窺原始檔一二。
以下為Setting.apk轉成java code。
Reference:
http://developer.android.com/guide/developing/building/index.html#detailed-build
沒有留言:
張貼留言