工具:apktool 下載下傳位址:https://ibotpeaches.github.io/Apktool/install/
原料:app-debug.apk
拆包執行指令
apktool d app-debug.apk
執行完該指令後,我們可以在目前目錄下看到一個新生成的app-debug目錄,裡面就是拆包後的app相關源碼和配置,其目錄結構與我們的項目結構基本一樣,接下來在進行打包:
打包執行指令
apktool b app-debug (app-debug是前面通過拆包生成的目錄名,也可以改成其他的)
執行完該指令後,我們可以在app-debug目錄下發現多了一個dist子目錄,這個子目錄裡還有一個apk,這個apk就是我們執行該指令後生成的目标apk。
此時,生成的apk并不能安裝,因為還沒有給它簽名
給apk簽名
如果沒有簽名檔案,則建立簽名檔案,執行下面指令
keytool -genkey -alias mykeystore -keyalg RSA -validity 2100 -keystore mykey.keystore
-genkey:生成一個密鑰(簽名檔案)
-alias:簽名檔案别名
-keyalg:生成密鑰對的算法(常用RSA/DSA,DSA隻用于簽名,預設采用DSA)
-validity:簽名檔案的有效期(機關:天)
-keystore:簽名檔案名
mykeystore:簽名檔案别名
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SYiFjMlFDZllTNlNWMwEjZwQGM2ETNiJmNkZmY4ATNi9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
執行完後會在目前目錄下生成簽名檔案:
檢視簽名檔案資訊:
keytool -list -keystore mykey.keystore
給apk簽名,使用指令:
jarsigner -verbose -keystore mykey.keystore -signedjar app-debug-signed.apk app-debug.apk mykeystore
之後就可以在目前目錄下看到生成進行簽名過的app-debug-signed.apk接下來可能會遇到下面問題
安裝失敗,提示failed to install .\app-debug-signed.apk: Failure [INSTALL_FAILED_TEST_ONLY]
原因: Android Studio 3.0會在打debug apk時,在manifest檔案application标簽裡自動添加 android:testOnly=true;屬性
通過檢視剛剛解包的mainfest檔案
發現确實添加了該屬性:
解決方法:
方法一
在項目中的gradle.properties全局配置中設定:
android.injected.testOnly=false
方法二,安裝加 -t :
adb install -t app-debug-signed.apk
另外,提下我們AS下運作代碼生成的debug包apk,它的預設簽名檔案是debug.keystore
debug.keystore位置: C:\Users\\.android\debug.keystore
debug.keystore的密碼:android
debug.keystore的别名:androiddebugkey