當前位置:首頁 » 編程軟體 » aapt編譯

aapt編譯

發布時間: 2022-06-26 21:25:27

1. android aapt 打包是什麼意思這個過程的目的是什麼。

意思:在一個APK文件中,除了有代碼文件之外,還有很多資源文件。這些資源文件是通過Android資源打包工具aapt(Android Asset Package Tool)打包到APK文件裡面的。在打包之前,大部分文本格式的XML資源文件還會被編譯成二進制格式的XML資源文件。
目的:將XML資源文件從文本格式編譯成二進制格式解決了空間佔用以及解析效率的問題和根據資源ID來快速找到對應的資源。

2. 怎樣獲取應用的包名和類名及解析aapt

原理:
通過查看AndroidManifest.xml
方法:
可以通過如下方法獲得:
1.aapt
aapt mp xmltree apk路徑 AndroidManifest.xml > 輸入的路徑
2.apktool 反編譯
apktool d -f apk路徑 輸出的路徑
3.monkey---Android自帶的工具
adb shell monkey --port 1080 -v -v
aapt即 Android Asset Packaging Tool
該工具在SDK/tools目錄下,如果你沒有設置環境變數,那需要進入該目錄下才能運行aapt命令,如果設置了環境變數則可以在任何目錄下運行aapt命令了。
1、列出壓縮文件目錄
aapt l[ist] [-v] [-a] file.{zip,jar,apk}
參數:
-v:會以table的形式輸出目錄,table的表目有:Length、Method、Size、Ratio、Date、Time、CRC-32、Name。其中Method表示壓縮形式,有Deflate和Stored兩種,即該Zip目錄採用的演算法是壓縮模式還是存儲模式;Ratio表示壓縮率。
-a:會詳細輸出所有目錄的內容。
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.
1)、查看APK包的packageName、versionCode、applicationLabel、launcherActivity、permission等各種詳細信息
aapt mp badging < file.apk>
2)、查看許可權
aapt mp permissions <file.apk>
3)、查看資源列表
aapt mp resources <file.apk>
把查看信息保存到文件中去可以使用:
aapt mp resources <file_path.apk> > sodino.txt
4)、查看APK配置信息
aapt mp configurations <file_path.apk>
5)、查看指定APK的指定XML文件
aapt mp xmltree <file_path.apk> res/***.xml
以樹形結構輸出的xml信息。
aapt mp xmlstrings <file_path.apk> res/***.xml
輸出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] \
[--proct proct1,proct2,...] \
[-c CONFIGS] [--preferred-configurations CONFIGS] \
[-o] \
[raw-files-dir [raw-files-dir] ...]
Package the android resources. It will read assets and resources that are
supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R
options control which files are output.
部分參數解釋:
-f:如果編譯出來的文件已經存在,強制覆蓋;
-m:使生成的包的目錄放在-J參數指定的目錄;
-J:指定生成的R.java的輸出目錄;
-S:res文件夾路徑;
-A:assert文件夾的路徑;
-M:AndroidManifest.xml的路徑;
-l:某個版本平台的android.jar的路徑;
-F:具體指定APK文件的輸出
1)、將工程的資源編譯出R.java文件
aapt package –m –J <R.java目錄> -S <res目錄> -l <android.jar目錄> -M
<AndroidManifest.xml目錄>
2)、將工程的資源編譯到一個包里
aapt package –f –S <res目錄> -l <android.jar目錄> -A <assert目錄> -M
<AndroidManifest.xml目錄> -F <輸出的包目錄>
4、打包好的APK中移除文件
aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
5、添加文件到打包好的APK中
aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
6、顯示aapt的版本
aapt v[ersion]

3. 如何修改android aapt源碼實現自定義package ID

反編譯android代碼並在eclipse中查看:apk反編譯得到程序的源代碼、片、XML配置、語言資源等文件下載上述工具中的apktool,解壓得到3個文件:aapt.exe,apktool.bat,apktool.jar,將需要反編譯的APK文件放到該目錄下,打開命令行界面(運行-CMD),定位到apktool文件夾,輸入以下命令:apktool.batd-ftest.apktest在改目錄下會生成一個classes_dex2jar.jar的文件,然後打開工具jd-gui文件夾里的jd-gui.exe,之後用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了

4. 反編譯Android APK的具體步驟是怎樣的

1、配置好JAVA環境變數,下載:apktool 解壓的文件放在C盤根目錄的apktool文件夾里(apktool文件夾自己創立)
2打開命令提示符,(開始-運行-輸入cmd)
3輸入:cd \apktool 系統指令到了apktool文件夾(這里就是為什麼要把解壓的apktool解壓的文件放到apktool文件夾的原因,當然你也可以自命名文件夾的名稱,那麼比如arc,那麼指令就變成了:cd \arc 前提是你必須把apktool解壓的文件放到這個文件夾裡面)
4使用RE管理器把系統裡面的framework-res.apk 與 SystemUI.apk 提取出來放在apktool文件夾裡面

5 如果只是想反編譯framework-res.apk

輸入apktool if framework-res.apk(框架的建立)
6開始最重要的反編譯,輸入指令,apktool d framework-res.apk

(反編輯的APK一定要用沒換過圖片的,否則回編輯失敗)
7最後反編譯完成

修改代碼完成後,輸入代碼:apktool d framework-res 即可完成回編譯
8回編譯後的新的 apk在framework/dis 文件夾裡面
9如果反編譯的是系統文件,比如,SystemUI.apk 那麼必須進行掛載框架,反編譯時,必須敲入一下命令:(然後再重復7-9步驟)
apktool if framework-res.apk
apktool if SystemUI.apk

10對於三星手機(比如9100、9108/9100G),如果反編譯SystemUI.apk要敲入一下命令進行框架掛載apktool if framework-res.apk
apktool if twframework-res.apk
apktool if SystemUI.apk
11回編譯的命令是 apktool b XXX (沒有後面的apk後綴)反編譯的命令是 apktool d xxx (有後面的apk)

5. 請教一下大神,我使用android killer編譯時出現了aapt已停止運行,是什麼問題

我有android逆向的相關視頻教程,你需要的話私信我送你

6. 如何在不影響原有aapt源碼的情況下編譯定製版aapt

正常情況下,編譯aapt時我們使用的命令是
make aapt11

改造後,我們希望該命令可以編譯出官方的aapt,然後通過另一個命令編譯出定製版的aapt,這里讓其命名為vaapt,當然這個前綴隨意,你喜歡就好。最終編譯的命令就是
make vaapt11

命令有了,模塊在哪裡呢?很簡單,直接在aapt同級目錄下拷貝一個aapt,重名名為vaapt。最終目錄結構如圖所示

我們還需要修改makefile文件,讓其編譯出vaapt,依賴的內容也是vaapt,makefile原內容為:
# ==========================================================
# Build the host static library: libaapt
# ==========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := libaapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := -Wno-format-y2k -DSTATIC_ANDROIDFW_FOR_TOOLS $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_CFLAGS_darwin := -D_DARWIN_UNLIMITED_STREAMS
LOCAL_SRC_FILES := $(aaptSources)
LOCAL_STATIC_LIBRARIES := $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)

include $(BUILD_HOST_STATIC_LIBRARY)

# ==========================================================
# Build the host executable: aapt
# ==========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := aapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptMain)
LOCAL_STATIC_LIBRARIES := libaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)

include $(BUILD_HOST_EXECUTABLE)

# ==========================================================
# Build the host tests: libaapt_tests
# ==========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := libaapt_tests
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptTests)
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_STATIC_LIBRARIES := libaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)

include $(BUILD_HOST_NATIVE_TEST)

可以看到LOCAL_MODULE的值都是aapt相關的,比如static library對應的值是libaapt,host
executable對應的值是aapt,host
tests對應的值是libaapt_tests,還有LOCAL_STATIC_LIBRARIES的值也是依賴static
library,其值為libaapt,我們需要將這幾個值修改為vaapt相關的,即在原來的值aapt前面加個v,對應修改為libvaapt、vaapt、libvaapt_tests、libvaapt。修改後的內容如下:

# ==========================================================
# Build the host static library: libaapt
# ==========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := libvaapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := -Wno-format-y2k -DSTATIC_ANDROIDFW_FOR_TOOLS $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_CFLAGS_darwin := -D_DARWIN_UNLIMITED_STREAMS
LOCAL_SRC_FILES := $(aaptSources)
LOCAL_STATIC_LIBRARIES := $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)

include $(BUILD_HOST_STATIC_LIBRARY)

# ==========================================================
# Build the host executable: aapt
# ==========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := vaapt
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptMain)
LOCAL_STATIC_LIBRARIES := libvaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)

include $(BUILD_HOST_EXECUTABLE)

# ==========================================================
# Build the host tests: libaapt_tests
# ==========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := libvaapt_tests
LOCAL_CFLAGS := $(aaptCFlags)
LOCAL_CPPFLAGS := $(aaptCppFlags)
LOCAL_LDLIBS_darwin := $(aaptHostLdLibs_darwin)
LOCAL_LDLIBS_linux := $(aaptHostLdLibs_linux)
LOCAL_SRC_FILES := $(aaptTests)
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_STATIC_LIBRARIES := libvaapt $(aaptHostStaticLibs)
LOCAL_STATIC_LIBRARIES_windows := $(aaptHostStaticLibs_windows)

include $(BUILD_HOST_NATIVE_TEST)

這時候執行編譯命令make
vaapt,完全可以編譯出一個vaapt命名的可執行文件。但是事情還沒有完,aapt的源碼依賴了androidfw下的部分源碼,而恰恰這部分源碼也可能需要修改,因此我們也需要做同樣的事,在同目錄下復制一份androidfw為vandroidfw。這個文件夾有兩份,一份是頭文件,一份是cpp文件,對應在不同的目錄。首先來看頭文件的目錄,在include下

然後是實現的cpp的目錄,在libs下

同樣的需要修改makefile文件,原文件內容是
# For the host
# =====================================================
include $(CLEAR_VARS)

LOCAL_MODULE:= libandroidfw
LOCAL_MODULE_HOST_OS := darwin linux windows
LOCAL_CFLAGS += -DSTATIC_ANDROIDFW_FOR_TOOLS
LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code
LOCAL_SRC_FILES:= $(hostSources)
LOCAL_C_INCLUDES := external/zlib

include $(BUILD_HOST_STATIC_LIBRARY)

# For the device
# =====================================================

include $(CLEAR_VARS)

LOCAL_MODULE:= libandroidfw
LOCAL_SRC_FILES:= $(deviceSources)
LOCAL_C_INCLUDES := \
system/core/include
LOCAL_STATIC_LIBRARIES := libziparchive libbase
LOCAL_SHARED_LIBRARIES := \
libbinder \
liblog \
libcutils \
libgui \
libutils \
libz

需要將LOCAL_MODULE的值從libandroidfw修改為libvandroidfw。

這時候其實還是有問題的,因為文件里的頭文件的引用還是androidfw的,會報找不到的錯誤,因此需要將include/vandroidfw和libs/vandroidfw下的文件內容中頭文件的include部分的代碼和androidfw相關的都改成vandroidfw。就像這樣

這是一個相對痛苦且繁瑣的步驟,只要耐住性子改了就可以了,不要遺漏即可。

然後回到vaapt的makefile文件。將對androidfw的引用改成vandroidfw,原內容為
aaptHostStaticLibs := \
libandroidfw \
libpng \
liblog \
libutils \
libcutils \
libexpat \
libziparchive-host \
libbase

修改後的內容為
aaptHostStaticLibs := \
libvandroidfw \
libpng \
liblog \
libutils \
libcutils \
libexpat \
libziparchive-host \
libbase

至此,就完成了一個自定義的aapt的模塊的新建和修改,之後只需要修改vaapt下的源碼以及vandroidfw下的源碼,即可得到自定義的aapt,而不改變原有aapt的源碼內容。如果需要編譯官方的aapt,只需要用make aapt編譯,編譯我們自定義的aapt,則使用make vaapt編譯,做到了一定的隔離,互不影響。當然如果你樂意,完全可以對vaapt和vandroidfw目錄使用git進行版本控制,這樣也就能看到我們歷史修改了什麼內容。

最後推薦一個可以用於差異比較的軟體Beyond Compare,跨平台的,windows,mac,linux都有,當然這是一個收費軟體。。。所以你懂的。可以用它比較兩個目錄的aapt之間的差異,效果如下。

7. AAPT代表什麼意思

aapt即Android Asset Packaging Tool , 在SDK的tools/目錄下. 該工具可以查看, 創建, 更新ZIP格式的文檔附件(zip, jar, apk). 也可將資源文件編譯成二進制文件.盡管你可能沒有直接使用過aapt工具, 但是build scripts和IDE插件會使用這個工具打包apk文件構成一個Android 應用程序.

8. 用android killer 編譯出現 AAPT.exe已關閉怎麼解決,哪位朋友知道 ,給解答下。。。。

你重新下載最新版本的apktool,用現在2.4.1版本的都可以。

9. 如何使用aapt替換apk裡面的asset文件夾

實際開發中經常遇到這樣的需求:一個應用打不同的包時,不同的包 的logo、 應用名,或者應用中的某些標志性的圖片、顯示的文字內容、歡迎語什麼的都要做出相應的改變。 對此,我們不可能將原工程復制出來再重新建立一個工程
實際開發中經常遇到這樣的需求:一個應用打不同的包時,不同的包 的logo、 應用名,或者應用中的某些標志性的圖片、顯示的文字內容、歡迎語什麼的都要做出相應的改變。 對此,我們不可能將原工程復制出來再重新建立一個工程,然後替換成不同的資源再打包。 那麼本文為讀者提供一種相對簡便的方法,有這種需求的友友就可以接著看下去了...
編譯時合並與替換資源,主要用到aapt命令工具:
先看一下aapt命令 跟不同參數時的作用:
命令行界面切換到 aapt 命令所在目錄,輸入aapt 如下:
\
\
可以看出, -s 可以指定尋找資源的目錄,而 overlay 可以合並資源:
比如 ,工程中原有的res 裡面有個字元串 :app_name(Menifest.xml中配置的應用名)
九秀美女直播string>,
在工程中新建兩個資源文件夾res2和res3,裡面分別有兩個字元串: app_name,more
//res2
9秀直播string>
更多2string>,
//res3
MM直播string>
更多3string>,
並在build.grandle里配置如下
aaptOptions { additionalParameters '-S', 'G:/wkplace/AS/NineShow3.0/res2', '-S', 'G:/wkplace/AS/NineShow3.0/res3', '--auto-add-overlay' noCompress 'foo', 'bar' ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:
_*:!CVS:!thumbs.db:!picasa.ini:!*~' }
運行後,應用名會顯示res里的app_name:「九秀美女直播」。這是因為: -s 可以指定多個資源目錄,我們通

10. 如何在 ubuntu 下編譯 mac 和 win 環境可執行的 aapt 工具

第一步,你需要下載QT源代碼(4.8的編譯比較容易),然後通過 ./configure (參數自己定,不懂看readme)接下來就是在QT CREATE裡面配置了,如下: 工具-->選項--->構建和運行 1. 編譯器: 點擊添加: "名稱"隨意 "編譯器路徑" **/arm-none-linux-gnueabi-g++ 找到你的編譯器,我這里是用ARM的 其他不填也行. 2.Qt Versions: 點擊添加:找到通過源碼編譯好的qmake文件. 例如:/usr/local/Qt-4.8.6/bin/qmake 3.構建套件: 點擊添加: "名稱"隨意, 重點是 "編譯器"跟"QT版本", 分別選擇剛剛添加的兩項. 調試器:如果是桌面環境那就選桌面的, 如果是在嵌入式中的,那不要也可以.. 如果是交叉編譯,那隻能編譯,不能運行...

熱點內容
高級語言都要編譯解析型語言 發布:2025-02-13 15:06:32 瀏覽:304
openwrt源碼下載 發布:2025-02-13 15:01:59 瀏覽:644
linux刪除一個目錄 發布:2025-02-13 15:00:29 瀏覽:539
螞蟻存儲 發布:2025-02-13 15:00:25 瀏覽:918
腳本師傳奇 發布:2025-02-13 14:45:48 瀏覽:481
我的世界lce伺服器剪輯 發布:2025-02-13 14:40:50 瀏覽:625
phpsftp上傳 發布:2025-02-13 14:35:43 瀏覽:274
c學生管理系統資料庫 發布:2025-02-13 14:21:41 瀏覽:123
傳奇添加會員腳本 發布:2025-02-13 14:20:50 瀏覽:206
微信開發平台源碼 發布:2025-02-13 14:14:20 瀏覽:614