首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 325449|回復(fù): 54
上一主題 下一主題
[經(jīng)驗(yàn)&教程]

APK文件修改解包打包

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2014-4-12 16:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式 | 來自江蘇
前言:相信每位玩機(jī)的人對(duì)APK文件都不陌生。你可能每天都與APK文件打交道,無論是安裝和卸載有用的應(yīng)用工具、插件、好玩的 游戲等等。。。你可曾知道這些每天都伴隨著你的APK文件是什么嗎?怎樣對(duì)它們作些修改呢?比如說:對(duì)英文版進(jìn)行漢化、修改功能、修改文字描述、去掉廣告 等等。本文介紹APK的基本知識(shí)、結(jié)構(gòu)、APK文件的解包、打包及簽名,以及對(duì)APK文件的常規(guī)修改。

一、APK文件簡介
  APK 是Android Package的縮寫,即即Android application package文件或Android安裝包。每個(gè)要安裝到Android平臺(tái)的應(yīng)用都要被編譯打包為一個(gè)單獨(dú)的文件,后綴名為.apk。APK文件是用專 業(yè)軟件eclipse編譯生成的文件包,其中包含了應(yīng)用的二進(jìn)制代碼、資源、配置文件等。通過將APK文件直接傳到Android手機(jī)中執(zhí)行即可安裝。 APK文件其實(shí)就是zip格式,但其擴(kuò)展名被改為apk,用解壓軟件可以直接打開。通過WinRAR或UnZip解壓后,你會(huì)看到有幾個(gè)文件和文件夾。一 個(gè)典型的APK文件通常有下列內(nèi)容組成:
AndroidManifest.xml 程序全局配置文件
classes.dex Dalvik字節(jié)碼
resources.arsc 編譯后的二進(jìn)制資源文件
META-INF 該目錄下存放的是簽名信息
res 該目錄存放資源文件
assets 該目錄可以存放一些配置文件

下面對(duì)這些文件和目錄做些基本的注釋和介紹。
AndroidManifest.xml
該文件是每個(gè)應(yīng)用程序都必須定義和包含的文件,它描述了應(yīng)用程序的名字、版本、權(quán)限、引用的庫文件等等信息。需要解包后才能加以閱讀。
classes.dex文件
classes.dex是java源碼編譯后生成的java字節(jié)碼文件。dex是Dalvik VM executes的全稱,即Android Dalvik執(zhí)行程序,并非Java ME的字節(jié)碼而是Dalvik字節(jié)碼。
resources.arsc
編譯后的二進(jìn)制資源文件。
META-INF目錄
META- INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統(tǒng)的安全。在eclipse編譯生成一個(gè)apk包時(shí),會(huì)對(duì)所有要打包的文件做一個(gè)校驗(yàn)計(jì)算, 并把計(jì)算結(jié)果放在META-INF目錄下。這就保證了apk包里的文件不能被隨意替換。比如拿到一個(gè)apk包后,如果想要替換里面的一幅圖片,一段代碼, 或一段版權(quán)信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增加了難度,有助于保護(hù)系統(tǒng)的安全。
res目錄
res目錄存放資源文件。包括圖片,字符串等等。
解包后,幾乎所有可能的修改和編輯工作基本都在這里。
assets目錄
assets目錄可以存放一些配置文件,這些文件的內(nèi)容在程序運(yùn)行過程中可以通過相關(guān)的API獲得。

二、APK文件的解包和打包
  APK 文件是用專業(yè)軟件eclipse編譯生成的文件包。在網(wǎng)上可以找到許多軟件來對(duì)APK的內(nèi)容進(jìn)行反編譯,例如:可以通過AXMLPrinter2工具和命 令:java -jar AXMLPrinter2.jar AndroidManifest.xml 解開在apk中的AndroidManifest.xml。最近,業(yè)界有一個(gè)功能強(qiáng)大的解包打包工具包apktool,可以在Windows下用來方便快 速地對(duì)APK文件進(jìn)行解包和打包,給修改和編輯工作帶來許多方便。下面來介紹它的使用。

1) APKtool軟件包
APKtool軟件包有2個(gè)程序組成:apktool.jar 和 aapt.exe
另外提供一個(gè)批處理文件:apktool.bat,其內(nèi)容為:
java -jar "%~dp0apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
運(yùn)行apktools.jar需要java環(huán)境(1.6.0版本以上)。
apktool.jar用于解包,apktool.jar和aapt.exe聯(lián)合用于打包。

2) APK文件的解包
下面以解開Contacts.apk為例。首先把Contacts.apk Copy到當(dāng)前工作目錄下(例:Test)。在DOS下打入命令
apktool d Contacts.apk ABC
這里“d”表示要解碼。Contacts.apk是要解包的APK文件。ABC是子目錄名。所有解包的文件都會(huì)放在這個(gè)子目錄內(nèi)。

3) APK文件的打包
在DOS下打入命令
apktool b ABC New-Contacts.apk
這里“b”表示要打包
ABC是子目錄名,是解包時(shí)產(chǎn)生的子目錄,用來存放所有解包后的和修改后的文件。
New-Contacts.apk是打包后產(chǎn)生的新的APK文件。

4) Framework框架文件
在解開APK文件時(shí),apktool需要框架文件(framework-res.apk)來解碼和打包。Apktool已經(jīng)包含了標(biāo)準(zhǔn)的框架,所以在大多數(shù) APK文件的解包時(shí),不需要另外提供框架文件。但是,某些制造商使用了他們自己的框架文件,為了解包,就不得不從手機(jī)中把框架文件(framework- res.apk)提取出來,然后安裝到計(jì)算機(jī)。安裝命令是:
apktool if framework-res.apk
安裝后就會(huì)得到:~apktool ramework.apk


5) 解包、解包和簽名批處理
在實(shí)際使用時(shí),可能對(duì)多個(gè)APK文件進(jìn)行處理。方便的做法是寫成批處理文件。打包和簽名可以一次完成。
解包批處理命令:
for %%i in (*.apk) do java -jar apktool.jar d %%i _%%i && move _%%i Modifying_Files && copy %%i Backuped_Raw_Files && @echo File [%%i] unpacking process is completed!
打包和簽名批處理命令:
for /d %%i in (*) do cd.. && java -jar apktool.jar b Modifying_Files%%i && java -jar signapk.jar testkey.x509.pem testkey.pk8 Modifying_Files%%idist*.apk %%i && ren %%i New%%i && move New%%i Modified_Signed_Files && @echo %%i Complete repacking and Signing! && cd Modifying_Files

三、應(yīng)用實(shí)例:APK解包后的編輯和修改
  為什么要對(duì)APK文件進(jìn)行解包?當(dāng)然要對(duì)其內(nèi)容進(jìn)行必要的修改。修改什么呢?通常,如果只是對(duì)圖像進(jìn)行替換,沒有必要進(jìn)行解包和打包。用WinRAR打開 APK文件,直接做替換就可以了。但是,如果要對(duì)文字和其它非圖像類內(nèi)容進(jìn)行修改,那只能通過解包解碼了。下面幾項(xiàng)任務(wù)需要對(duì)APK進(jìn)行解包和打包。這里 只作大概介紹,請(qǐng)自己去找詳細(xì)的操作方法和教程。

1) 漢化APK軟件
在 res文件夾中,我們可以看到有很多values-***的文件夾,這就是語言包。values是英文語言包,values-zh是中國地區(qū)語言包(包含 港澳臺(tái)及內(nèi)地),values-zh-rCN是中文簡體語言包(只包含內(nèi)地),values-zh-rTW是中文繁體語言包(港澳臺(tái))。除此以外,其它地 區(qū)的語言包都是精簡的對(duì)象,可以不過多了解。
在values文件夾里,通常有arrays.xml、strings.xml等語言文件,要作漢化就要對(duì)這些文件進(jìn)行修改。有時(shí)也需要修改其它xml文件,一個(gè)一個(gè)地認(rèn)真查看。

2) 修改圖標(biāo)標(biāo)簽
每一個(gè)APK文件都有一個(gè)“圖標(biāo)標(biāo)簽”。將APK程序安裝進(jìn)手機(jī)后,在圖標(biāo)下面顯示圖標(biāo)標(biāo)簽文字。這個(gè)圖標(biāo)標(biāo)簽的內(nèi)容是可以修改的。在 esvalues下找到strings.xml,修改其中的一行:
圖標(biāo)標(biāo)簽
例如:靜音啟動(dòng)
同理,如果是窗口小插件,要修改widget_name。
注意:system/app下的apk不宜修改,因?yàn)橐瑫r(shí)修改對(duì)應(yīng)的odex文件。

3) 去掉APK中的廣告
有 很多APK應(yīng)用都帶有廣告。為了去掉程序中的廣告,要修改main.xml文件與廣告有關(guān)的內(nèi)容。在 es目錄下找到文件main.xml。通常在 layout目錄下,有時(shí)也被放在其它目錄下。甚至,有時(shí)不存在main.xml文件,廣告行被放在其它xml文件內(nèi)。只能細(xì)心逐個(gè)文件進(jìn)行查找。無論 哪一種情況,查看其內(nèi)容,你會(huì)看到有一項(xiàng)類似的命令如下。這就是廣告顯示。

將其改為:

可以看到,關(guān)鍵是要把fill_parent改為0.0dip,把wrap_content改為0.0dip,其它保持不變即可。這種改法就是不給廣告顯示空間,當(dāng)然你就看不到廣告了。

4) 修改顯示電池為1%精度
在XT502上,默認(rèn)顯示只有7檔: 0%,10%,20%,40%,60%,80% 和100%。通過修改framework-res.apk,可以改變顯示精度。但是在XT502上,實(shí)踐證明最好可能達(dá)到的現(xiàn)實(shí)精度只有10%。修改工作如下:
(1) 對(duì)framework-res.apk進(jìn)行解包
(2) 修改和增加電池狀態(tài)圖標(biāo)
(3) 修改文件stat_sys_battery.xml
(4) 修改文件stat_sys_battery_charge.xml
(5) 打包
(6) 提取stat_sys_battery.xml,stat_sys_battery_charge.xml,resources.arsc和一個(gè)圖標(biāo)目錄:drawable-mdpi
(7) 重新裝配framework-res.apk

5) 狀態(tài)欄信息通知文字顏色修改
狀態(tài)欄信息通知文字顏色,是由framework-res.apk文件里resvalues下的colors.xml文件控制的,所以我們只需修改colors.xml文件就可以了。另外,此文件還控制下拉欄的文字顏色,可以修改。
用文本編輯器打開colors.xml文件,找到
#ff000000
將這句修改為:#ffffffff
這狀態(tài)欄信息通知文字顏色由黑色改為白色。


上一篇:華數(shù)什么時(shí)候出直播?芒果延時(shí)30分鐘。。逆天了
下一篇:上網(wǎng)不快?你家無線路由器信道選對(duì)了嗎?看了你就明白...
推薦
發(fā)表于 2014-4-21 19:23 | 只看該作者 | 未知
試試啊
頭像被屏蔽
推薦
發(fā)表于 2014-4-20 17:01 | 只看該作者 | 來自河南
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
頭像被屏蔽
推薦
發(fā)表于 2014-4-12 16:38 | 只看該作者 | 來自河北
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
推薦
發(fā)表于 2014-4-12 16:06 | 只看該作者 | 未知
頂起頂起頂起
6#
發(fā)表于 2014-4-24 22:00 | 只看該作者 | 未知
正需要啊,感謝樓主無私分享!
7#
發(fā)表于 2014-4-24 22:00 | 只看該作者 | 未知
正需要啊,感謝樓主無私分享!
8#
發(fā)表于 2014-4-24 22:00 | 只看該作者 | 未知
正需要啊,感謝樓主無私分享!
9#
發(fā)表于 2014-4-24 22:29 來自ZNDS手機(jī)版 | 只看該作者 | 來自四川
;-);-)
10#
發(fā)表于 2014-4-26 06:21 | 只看該作者 | 未知
要看看
11#
發(fā)表于 2014-4-27 12:56 | 只看該作者 | 未知
不錯(cuò) 支持一個(gè)了
12#
發(fā)表于 2014-4-29 17:00 | 只看該作者 | 未知
我只是路過
13#
發(fā)表于 2014-5-1 09:52 來自ZNDS手機(jī)版 | 只看該作者 | 未知
鼎力支持??!
14#
發(fā)表于 2014-5-6 09:52 | 只看該作者 | 未知
kkkkkkkkkkkkkkkkkk
15#
發(fā)表于 2014-5-6 10:13 | 只看該作者 | 來自湖南
很給力,ZNDS有你更精彩!

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-12-27 10:28 , Processed in 0.073045 second(s), 14 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表