1. 下載Apktool
要使用Apktool,需要準(zhǔn)備好 apktool.jar
和 apktool.bat
。
我準(zhǔn)備了兩種下載方式,可自行選擇:
- apktool官網(wǎng)下載地址
- 百度網(wǎng)盤下載鏈接
1.1 Apktool官網(wǎng)下載
apktool官網(wǎng)下載地址:https://apktool.org/docs/install
1.下載apktool.bat
:點(diǎn)擊高亮字體 wrapper script
,進(jìn)入apktool.bat
的下載地址,我這里顯示無法訪問鏈接,因此給出替代方案。
自己本地電腦新建一個(gè)apktool.bat
文件,然后使用vscode
或者notepad++
等文本編輯器打開apktool.bat
文件,并復(fù)制以下代碼到該文件中:
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
set java_exe=java.exe
if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)
rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion
rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
rem Directory, rebuild
set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
rem APK file, unpack
set fastCommand=d
)
:load
%java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
2.下載apktool.jar
- 點(diǎn)擊高亮字體
latest version
,進(jìn)入apktool.jar
的下載地址,點(diǎn)擊下載最新版的apktool_2.9.3.jar
- 下載完成后將
apktool_2.9.3.jar
重命名為apktool.jar
1.2 百度網(wǎng)盤下載
百度網(wǎng)盤鏈接:
鏈接:https://pan.baidu.com/s/1gmoIO2JABqotrLiaCMxN6g?pwd=4m4x
提取碼:4m4x
2. 安裝Apktool
1.將apktool.bat
和 apktool.jar
放到任一同級(jí)目錄下
如 E:\Applications\Apktool
2.添加該目錄路徑到 Path
環(huán)境變量
- 右鍵此電腦->屬性->系統(tǒng)->高級(jí)系統(tǒng)設(shè)置->高級(jí)->環(huán)境變量,打開環(huán)境變量
- 修改
Path
變量,添加E:\Applications\Apktool
到變量中
3.驗(yàn)證是否安裝成功
打開cmd,輸入apktool
命令,顯示如下圖,表示安裝成功:
3. 使用Apktool
3.1 配置Java環(huán)境
要想使用Apktool工具,必須先配置Java環(huán)境,需要安裝JDK 1.8以上的版本。
JDK的安裝與配置:Java環(huán)境搭建,配置環(huán)境變量
3.2 準(zhǔn)備Apk文件
準(zhǔn)備一個(gè)apk文件用于反編譯的練習(xí),apk文件見 1.2
章節(jié)的百度網(wǎng)盤鏈接:
該apk文件打開后樣式如下:
3.3 反編譯Apk文件
反編譯apk文件分為四步:
- 解包apk文件
- 對(duì)解包后的apk文件進(jìn)行修改
- 重新打包apk文件
- 對(duì)apk文件進(jìn)行簽名(簽名以后才能夠安裝到手機(jī))
3.3.1 解包Apk文件
切換到apk所在的路徑,并輸入以下命令,解壓apk文件到當(dāng)前文件夾:
apktool d app-release.apk
顯示如下圖,表示解壓成功:
解壓后在app-release.apk
文件的同級(jí)目錄下,得到同名文件夾 app-release
3.3.2 修改Apk文件
反編譯的目的就是為了修改原來的apk文件,修改成自己想要的樣子。
原先的的apk樣式為紅色的 Hello World!
,此處我想修改成藍(lán)色的 Hello Android!
,步驟如下:
1.使用 vscode
打開 app-release
文件夾,找到路徑 res/layout/activity_main.xml
,修改其中的顏色和文本代碼如下:
android:textColor="#0000FF"
android:text="Hello Android!"
2.修改后的 activity_main.xml
文件內(nèi)容如下
3.3.3 打包Apk文件
1.META-INF
文件夾,這里面包含舊的簽名文件,用不到該文件夾,因此刪除它
2.使用以下命令打包文件夾,生成新的apk文件
apktool b app-release
3.3.4 簽名Apk文件
1.生成密鑰庫文件,即keystore文件
使用以下命令生成keystore文件:
keytool -genkey -alias android_keystore -keyalg RSA -validity 20000 -keystore android.keystore
以上各個(gè)參數(shù)的含義如下:
-
-genkey
:這個(gè)參數(shù)表示keytool要生成一個(gè)新的密鑰對(duì)和一個(gè)自簽名的證書 -
-alias android_keystore
:這個(gè)參數(shù)指定了生成的密鑰對(duì)和證書的別名(alias),此處別名為android_keystore,這個(gè)別名在密鑰庫中用于唯一標(biāo)識(shí)這個(gè)特定的密鑰對(duì)和證書 -
-keyalg RSA
:這個(gè)參數(shù)指定了用于生成密鑰對(duì)的算法,即RSA算法。RSA是一種廣泛使用的非對(duì)稱加密算法,它使用一對(duì)密鑰:一個(gè)公鑰用于加密數(shù)據(jù),另一個(gè)私鑰用于解密數(shù)據(jù) -
-validity 20000
:這個(gè)參數(shù)設(shè)置了證書的有效期,以天為單位,此處證書的有效期是20000天 -
-keystore android.keystore
:這個(gè)參數(shù)指定了密鑰庫(keystore)的文件名,即android.keystore。密鑰庫是一個(gè)用于存儲(chǔ)密鑰對(duì)和證書的數(shù)據(jù)庫文件
當(dāng)使用keytool生成密鑰對(duì)和證書時(shí),命令執(zhí)行過程需要輸入信息:
- 密鑰庫的密碼:此處我填寫為
123456
- 密鑰對(duì)和證書的所有者姓名、組織單位、城市或地區(qū)、省/州/郡、國家代碼等,這些信息將被包含在生成的證書中,用于標(biāo)識(shí)證書的所有者。
此時(shí)就在當(dāng)前目錄下,生成了一個(gè)android.keystore
文件:
2.將剛剛生成的android.keystore
文件,拷貝到未簽名的apk文件同級(jí)目錄下,切換到該路徑下,輸入以下命令,進(jìn)行簽名:
jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore
以上各個(gè)參數(shù)的含義如下:
-
jarsigner
:這是 Java 開發(fā)工具包 (JDK) 中的一個(gè)工具,用于對(duì) JAR 文件、APK 文件等進(jìn)行簽名 -
-verbose
:這個(gè)參數(shù)用于輸出詳細(xì)的簽名過程,當(dāng)使用這個(gè)參數(shù)時(shí),jarsigner 會(huì)顯示更多關(guān)于簽名步驟的信息,這有助于調(diào)試和了解簽名過程的具體情況 -
-keystore android.keystore
:這個(gè)參數(shù)指定了密鑰庫文件的路徑和名稱,即 android.keystore -
-signedjar app-release-signed.apk app-release.apk
:這個(gè)參數(shù)指定了簽名后的 APK 文件的輸出路徑和名稱,即 app-release-signed.apk,這個(gè)文件是原始 APK 文件 app-release.apk 經(jīng)過簽名后的結(jié)果 -
android_keystore
:這個(gè)參數(shù)指定了密鑰庫中用于簽名的密鑰對(duì)的別名,別名是在使用 keytool 生成密鑰對(duì)時(shí)指定的,它用于在密鑰庫中唯一標(biāo)識(shí)這個(gè)特定的密鑰對(duì)
此時(shí)就在當(dāng)前目錄下,生成了一個(gè)app-release-signed.apk
文件:
3.將新生成的app-release-signed.apk
文件,拖入到夜神模擬器中安裝,然后點(diǎn)擊打開即可
如果夜神模擬器中原先存在該同名應(yīng)用,需要先卸載掉,然后再安裝,否則可能出現(xiàn)一直在安裝中,導(dǎo)致安裝不成功的情況。
文章來源:http://www.zghlxwxcb.cn/news/detail-831591.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-831591.html
到了這里,關(guān)于【Android】使用Apktool反編譯Apk文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!