古詩詞大全網 - 個性簽名 - 如何反編譯android應用以及重編譯,簽名和對齊優化

如何反編譯android應用以及重編譯,簽名和對齊優化

首先,了解壹下我們為什麽需要反編譯apk

大部分情況下,是由於想本地化壹款優秀的應用,才需要做這事兒;又或者進行少量的smali修改以達到想要的效果(如添加歸屬地,使3G版Nexus 7支持Wi-Fi熱點)。

下面我們先準備運行環境和工具

建立工作目錄,如.\workspace\apktoolbox (下面同樣以此路徑為例)

必不可少的JDK:Oracle Java下載,安裝完成後把<jdk-inst-path>\bin添加到$PATH環境變量中

反編譯和重編譯工具apktool:Google Code下載,按平臺下載(壹個apktool-install-<platform>-<ver>-tar.bz2,壹個apktool<ver>.tar.bz2,下載完成後解壓至.\workspace\apktoolbox\bin

密鑰文件,***4組。test/shared/media/platform,從android source中獲取,分別對應不同***享用戶ID時簽名所需(查看應用AndroidManifest.xml第二行android:sharedUserId項 ),放到.\workspace\apktoolbox\bin下

test - 無android:sharedUserId項

shared - android:sharedUserId=android.uid.shared

media - android:sharedUserId=android.uid.media

platform - android:sharedUserId=android.uid.system

簽名工具signapk.jar,放到.\workspace\apktoolbox\bin下

對齊優化工具zipalign(從android sdk中獲取,在tools目錄下),放到.\workspace\apktoolbox\bin下

準備工作完成

接下來我們就要開始工作了(以本地化工作為例)

把待反編譯的apk放到.\workspace\apktoolbox\apks下

在命令行模式下進入.\workspace\apktoolbox\bin目錄,輸入以下命令進行解包(反編譯)

apktool d ..\apks\<apkfile>.apk ..\apks\<outdir>

.\workspace\apktoolbox\apks\<outdir>\res下的values目錄(英文原版)和values-r<locale>目錄(本地化)就是我們需要的對象。

本地化工作完成後,在命令行中輸入以下命令進行重新打包(重新編譯)

apktool b ..\apks\<outdir>

.\workspace\apktoolbox\apks\<outdir>\dist目錄下會生成重新打包後的apk(未簽名,未對齊優化)

重新打包完成後,在命令行中輸入以下命令進行簽名(根據實際情況選用密鑰,這裏以test密鑰為例)

java -jar signapk.jar testkey.x509.pem testkey.pk8 ..\apks\<outdir>\dist\<apkfile>.apk ..\apks\<apkfile>_signed.apk

簽名完成後,在命令行中輸入以下命令進行對齊優化

zipalign -f -v 4 ..\apks\<apkfile>_signed.apk ..\apks\<apkfile>_zipaligned.apk

<apkfile>_zipaligned.apk就是我們最終需要的apk了。

完成

部分apk需要系統框架資源,沒有的話在重新打包時會報錯,這種情況下我們只需要先安裝壹下對應系統框架即可(從妳目標ROM中把/system/framework/framework-res.apk提取出,放到.\workspace\apktoolbox\apks下)。在命令行中輸入以下命令進行安裝

apktool if ..\apks\framework-res.apk