【Android自動化打包】01. aapt的用法

yangxi_001發表於2014-03-13
什麼是aapt?
執行命令: C:\Users\Xiaopeng>aapt

Android Asset Packaging Tool

1. 列出apk包的內容
aapt l[ist] [-v] [-a] file.{zip,jar,apk}

注:filepath是apk存放的路徑

1.1 aapt l -v filepath/..apk  :以table的形式列出來    (不過我用起來老是出,win7和xp都一樣,大家可以試一下)


1.2 aapt l -a filepath/..apk    : 詳細的列出apk的內容

由於內容太多,我們把內容都存放到txt檔案裡,開啟檢視

1.3 aapt l filepath/..apk  : 檢視apk內容



由於內容太多,我們把內容都存放到txt檔案裡,開啟檢視



對比一下可以看出, aapt l -a filepath/..apk 顯示的apk內容更詳細

2. 檢視apk的一些資訊

aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]
   badging          Print the label and icon for the app declared in APK.
   permissions      Print the permissions from the APK.
   resources        Print the resource table from the APK.
   configurations   Print the configurations in the APK.
   xmltree          Print the compiled xmls in the given assets.
   xmlstrings       Print the strings of the given compiled xml assets.

aapt d badging filepath/..apk :顯示標籤、圖示和應用程式的相關描述。  (這個命令很有用啊,我寫過一個自動化更新下載的程式,就用到這個命令來校驗應用的包名、版本和許可權)


aapt d permissions filepath/..apk :顯示apk所具有的系統許可權



aapt d badging filepath/..apk : 顯示apk的資源列表  (很多內容,如果想看最好還是轉到txt裡面檢視吧)


aapt d configurations filepath/..apk : 顯示apk的配置資訊    


aapt d xmltree filepath/..apk  xmlname :  以樹型顯示apk中某個xml檔案

例:以樹型顯示QQapk中 AndroidManifest.xml檔案


aapt d xmlstrings filepath/..apk  xmlname :  顯示apk中某個xml檔案中所有的字元

例:顯示QQapk中 AndroidManifest.xml中的字元


3. 編譯android資源

aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \
        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \
        [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \
        [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \
        [--rename-manifest-package PACKAGE] \
        [--rename-instrumentation-target-package PACKAGE] \
        [--utf16] [--auto-add-overlay] \
        [--max-res-version VAL] \
        [-I base-package [-I base-package ...]] \
        [-A asset-source-dir]  [-G class-list-file] [-P public-definitions-file] \
        [-S resource-sources [-S resource-sources ...]] \
        [-F apk-file] [-J R-file-dir] \
        [--product product1,product2,...] \
        [-c CONFIGS] [--preferred-configurations CONFIGS] \
        [-o] \
        [raw-files-dir [raw-files-dir] ...]

哇,有點多,參考別人給出的解釋:

-f    如果編譯出來的檔案已經存在,強制覆蓋
-m  使生成的包的目錄存放在-J引數指定的目錄
-J    指定生成的R.java 的輸出目錄 
-S    res資料夾路徑
-A    assert資料夾路徑
-I     某個版本平臺的android.jar的路徑
-F    具體指定APK檔案的輸出 

例項:

一. 將工程的資源編譯到R.java檔案

aapt package -m -J <R.java資料夾> -S <res路徑> -I <android.jar路徑> -M<AndroidManifest.xml路徑>

例項:
1. cmd -- 定位到android原始檔目錄,如: cd  E:\wirelessqa\hi ---  根據上面給出的命令套進去

<R.java資料夾> :gen\com\perf\
<res路徑>: res
<android.jar路徑> :    
E:\Software\android-sdk-windows-1.6_r1\platforms\android-1.6\android.jar  這個要看你apk對應支援的android版本
這裡有很多,找到對應的

                                                                                                                
<AndroidManifest.xml路徑>: AndroidManifest.xml 

OK,執行命令: 

aapt p -f -m -J gen\com\perf\ -S res -I E:\Software\android-sdk-windows-1.6_r1\platforms\android-1.6\android.jar -M AndroidManifest.xml



二. 將工程的資源編譯到一個APK包裡

aapt package -f -S <res路徑> -I <android.jar路徑> -A <assert路徑> -M <AndroidManifest.xml路徑> -F <輸出的包目錄+包名>

例項:
1. cmd -- 定位到android原始檔目錄,如: cd  E:\wirelessqa\hi ---  根據上面給出的命令套進去
 <res路徑>: res
<android.jar路徑>:
E:\Software\android-sdk-windows-1.6_r1\platforms\android-1.6\android.jar
<assert路徑> :assets
<AndroidManifest.xml路徑>: 當前目錄下的 AndroidManifest.xml
<輸出的包目錄+包名>: 當前目錄下 hi.apk

OK,執行命令: 
aapt p -f -S res -I E:\Software\android-sdk-windows-1.6_r1\platforms\android-1.6\android.jar -A assets -M AndroidManifest.xml -F hi.apk

4. 移除打包好的apk中的檔案

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]

例項:將apk中的某個檔案移除掉     命令:aapt r <你的apk檔案路徑> <想要移除的檔名>



先從hi.apk除除AndroidManifest.xml檔案,再嘗試去顯示,結果無法找到,證明我們已經移除成功。

5. 新增檔案到打包好的apk中

aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]

例項:將檔案新增到打包好的apk檔案中   命令:aapt a <你的apk檔案路徑> <想要新增的檔案路徑>



在這裡我遇到一個問題,新增檔案成功之後再去嘗試顯示檔案,結果提示檔案損壞,至於是什麼問題我還不知道,如果大家誰知道可以告訴我一下。

6. PNG檔案預處理

aapt c[runch] [-v] -S resource-sources ... -C output-folder ...        做PNG檔案的預處理,並將結果儲存到一個資料夾中

例項: aapt c -S <res路徑> -C <想存放的資料夾路徑>


結果:

7. 顯示aapt版本

aapt v[ersion]   
  
轉自:http://blog.csdn.net/wirelessqa

相關文章