APK文件的拆包、包裝和修改
我相信每個玩電腦的人都熟悉APK文件。妳可能每天都要和APK文件打交道,無論是安裝卸載有用的應用工具,插件,好玩的遊戲等等。。。妳知道每天伴隨妳的這些APK文件是什麽嗎?如何對它們進行壹些改變?比如:英文版漢化,修改功能,修改文字描述,去掉廣告等等。介紹了APK的基本知識和結構,APK文件的拆包、打包和簽名,以及APK文件的日常修改。
1簡介。APK文件
APK是Android Package的縮寫,即Android應用包文件或Android安裝包。每個要安裝在Android平臺上的應用程序都應該編譯並打包到壹個單獨的文件中,文件的後綴為。apk。APK文件是由專業軟件eclipse編譯的壹個包,裏面包含二進制代碼、資源、配置文件等。它可以通過直接將APK文件傳輸到Android手機執行來安裝。APK文件其實是zip格式的,只是擴展名改成了apk,可以直接用解壓軟件打開。通過WinRAR或unzip解壓後,妳會看到幾個文件和文件夾。典型的APK文件通常由以下內容組成:
AndroidManifest.xml程序的全局配置文件
Class.dex達爾維克字節碼
resources.arsc的編譯二進制資源文件
META-INF\ Signature信息存儲在此目錄中。
Res\該目錄保存資源文件。
Assets\這個目錄可以保存壹些配置文件。
下面是這些文件和目錄的壹些基本說明和介紹。
AndroidManifest.xml
這個文件是每個應用程序都必須定義和包含的文件。它描述了應用程序的名稱、版本、權限、引用的庫文件和其他信息。在妳能閱讀它之前妳需要打開它。
Classes.dex文件
Classes.dex是通過編譯java源代碼生成的java字節碼文件。Dex是Dalvik VM executes的全稱,即Android Dalvik Executor,不是Java ME的字節碼而是Dalvik的字節碼。
resources.arsc
編譯的二進制資源文件。
元信息目錄
META-INF目錄存儲簽名信息,保證apk包的完整性和系統的安全性。eclipse編譯生成apk包時,會對所有要打包的文件進行檢查計算,並將計算結果放在META-INF目錄中。這保證了apk包中的文件不能被隨意替換。比如拿到壹個apk包後,想要替換壹張圖片、壹段代碼或者壹條版權信息,直接解壓、替換、重新打包基本是不可能的。這使得病毒感染和惡意修改更加困難,有助於保護系統的安全。
Res目錄
Res目錄存儲資源文件。包括圖片,字符串等等。
開箱後,幾乎所有可能的修改和編輯基本都在這裏了。
資產目錄
Assets目錄可以存儲壹些配置文件,在程序運行過程中可以通過相關的API獲取這些文件的內容。
2.拆包和包裝。APK檔案
APK文件是由專業軟件eclipse編譯生成的軟件包。網上可以找到很多軟件對apk的內容進行反編譯。比如可以通過AXMLPrinter2工具和命令解鎖APK的Android manifest . XML:Java-jar axml printer 2 . jar Android manifest . XML最近業界有壹個強大的解包打包工具包apktool,可以用來在Windows下方便快捷的解包打包APK文件,給修改和編輯帶來了很多方便。下面介紹壹下它的用途。
1) APKtool軟件包
APKtool軟件包由兩個程序組成:apktool.jar和aapt.exe。
此外,還提供了壹個批處理文件apktool.bat,其內容如下:
Java-jar " % ~ dp0 \ apk tool . jar " % 1% 2% 3% 4% 5% 6% 7% 8% 9
運行apktools.jar需要java環境(版本1.6.0以上)。
apktool.jar用於解包,apktool.jar和aapt.exe共同用於打包。
2)打開APK文件
我們以Contacts.apk的解決方案為例。首先,將Contacts.apk復制到當前工作目錄(例如,Test)。在DOS下鍵入命令
apktool d聯系人
這裏“d”的意思是解碼。聯系人。APK是要解包的apk文件。ABC是子目錄名。所有解壓縮後的文件都將放在這個子目錄中。
3)APK文件的包裝
在DOS下鍵入命令
apktool b ABC新聯系人. apk
這裏“b”的意思是打包。
ABC是壹個子目錄名,解壓時生成,用來存放所有解壓和修改過的文件。
新聯系人。APK是打包後生成的新apk文件。
4)框架文件
在解包APK文件時,apktool需要壹個框架文件(framework-res.apk)來解碼和打包。Apktool已經包含了標準框架,所以在解包大部分APK文件時,不需要提供額外的框架文件。然而,壹些制造商使用他們自己的框架文件。為了理解這個包,他們必須從手機中提取框架文件(framework-res.apk)並安裝到電腦上。安裝命令是:
apktool if framework-res.apk
安裝後會得到:~ \ apk tool \ framework \ 1 . apk。
5)拆包、拆包和簽名批量處理
在實際使用中,可能會處理多個APK文件。把它寫成批處理文件很方便。包裝和簽名可以壹次完成。
解包批處理命令:
對於%%i in (*。d % % i _ % % i & amp& amp移動_%%i修改文件。& amp復制%%i備份原始文件& amp& amp@echo File [%%i]解包過程完成!
打包和簽署批處理命令:
for /d %%i in (*) do cd..& amp& ampjar b修改_文件\ % % i & amp& ampJava-jar signapk . jar testkey . x509 . PEM testkey . pk8修改_Files\%%i\dist\*。apk % % i & amp& ampren % % i New % % i & amp& amp移動新的%%i修改簽名文件& amp& amp@ echo % %我完成重新打包簽名!& amp& ampcd修改_文件
3.應用示例:打開APK後的編輯和修改。
為什麽打開APK的文件?當然,有必要對其內容進行必要的修改。修改什麽?通常情況下,如果只是更換鏡像,就沒有必要拆包打包。用WinRAR打開APK文件,直接替換。但如果要修改文字等非圖片內容,只能通過解包解碼。以下任務需要解包和打包APK。這裏只是壹個大概的介紹,詳細的操作方法和教程請自行查找。
1)中文APK軟件
在res文件夾中,我們可以看到有很多文件夾的值都是-***,也就是語言包。Values是英文語言包,values-zh是中國(包括港澳臺)語言包,values-zh-rCN是簡體中文語言包(僅包括中國大陸),values-zh-rTW是繁體中文語言包(港澳臺)。另外,其他地區的語言包都是簡化對象,妳可以不太了解。
在values文件夾中,通常有arrays.xml、strings.xml等語言文件。如果要將這些文件本地化為中文,必須對其進行修改。有時候需要修改其他xml文件,壹個壹個仔細看。
2)修改圖標標簽
每個APK文件都有壹個“圖標標簽”。APK程序安裝到手機後,圖標標簽文本會顯示在圖標下方。此圖標標簽的內容可以修改。在\res\values下找到strings.xml並修改壹行:
& ltstring name = " app _ name " & gt圖標標簽
例如:
同樣,如果是widget,就需要修改widget_name。
註意:system/app下的apk不要修改,因為要同時修改對應的odex文件。
3)刪除APK的廣告。
有許多帶廣告的APK應用程序。為了刪除程序中的廣告,需要修改main.xml文件中與廣告相關的內容。在\res目錄中找到main.xml文件。通常在\layout目錄下,有時在其他目錄下。甚至,有時候沒有main.xml文件,廣告行放在其他xml文件裏。壹次只能仔細搜索壹個文件。無論是哪種情況,檢查它的內容,您都會看到類似的命令,如下所示。這是廣告展示。
& ltcom . admob . Android . ads . ad view Android:id = " @ id/ad " Android:layout _ width = " fill _ parent " Android:layout _ height = " wrap _ content " admobsdk:background color = " # ff 000000 " admobsdk:text color = " # ffffffff " admobsdk:keywords = " Android application "/& gt;
修正如下:
& ltcom . admob . Android . ads . ad view Android:id = " @ id/ad " Android:layout _ width = " 0.0 dip " Android:layout _ height = " 0.0 dip " admobsdk:background color = " # ff 000000 " admobsdk:text color = " # ffffffff " admobsdk:keywords = " Android application "/& gt;
可以看到,關鍵是把fill_parent改成0.0dip,把wrap_content改成0.0dip,其他不變。這個改動不是給廣告位,當然妳看不到廣告。
4)將顯示電池修改為1%精度。
在XT502上,默認只顯示7個文件:0%,10%,20%,40%,60%,80%,100%。通過修改framework-res.apk,可以改變顯示精度。但是,在XT502上,已經證明可能的最佳現實精度只有10%。修改工作如下:
(1)打開框架包裝-res.apk
(2)修改和添加電池狀態圖標
(3)修改文件stat _ sys _ battery.xml
(4)修改stat _ sys stat _ sys _ battery _ charge . XML文件
(5)包裝
(6)提取stat_sys_battery.xml、stat_sys_battery_charge.xml、resources.arsc和壹個圖標目錄:drawable-mdpi。
(7)重新組裝框架-res.apk
5)狀態欄信息通知要修改的文本顏色。
狀態欄信息通知的文本顏色由framework-res.apk文件中res\values下的colors.xml文件控制,所以我們只需要修改colors.xml文件。另外,這個文件還控制下拉欄的文本顏色,可以修改。
用文本編輯器打開colors.xml文件並找到。
& ltcolor name = " HW _ status bar _ time " & gt;# ff000000 & lt/color & gt;
將這句話修改為:
該狀態欄信息通知文本顏色從黑色變為白色。