1. 程式人生 > >替換APK中的檔案重新打包

替換APK中的檔案重新打包

這兩天遇到一個問題,一直沒有頭緒,為了確認原因,需要將新的資源和程式碼,替換到老包中,看看問題是否會出現,結果很無情,問題依舊。不過倒是研究了下如何替換assets中的檔案。指令碼基本都是網上搜集來的,發現這個方法有個bug,替換可以,無法刪除,因此res會變大。用的時候要注意這點。

#簽名相關資訊 需要按需修改為自己的
SET KEYSTORE_NAME=xxxxxxxxxxxxxx.keystore
#app別稱
SET KEYSTORE_ALIAS=xxxxxxxxxxxxxx
#簽名密碼
SET KEYSTORE_STOREPASS=xxxxxxxxxxxxxx
#簽名密碼
SET KEYSTORE_KEYPASS=xxxxxxxxxxxxxx

#原apk名字
SET INPUT_APK=.\input.apk
#新建META-INF和assets兩個目錄 其中META-INF新建幾個和apk中名字一樣的檔案 但是大小為0 可以用touch命令
SET META-INF=.\META-INF
#assets儲存著需要被替換的檔案
SET ASSETS=.\assets

#新建output目錄
SET UNSIGNED=.\output\Unsinged.apk
SET SIGNED=.\output\Signed.apk
SET OPT=.\output\output.apk
 
copy %INPUT_APK% %UNSIGNED%
 
jar -uf %UNSIGNED% %META-INF%
jar -uf %UNSIGNED% %ASSETS%
@echo 替換檔案完成!
 
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore %KEYSTORE_NAME% -storepass %KEYSTORE_STOREPASS% -keypass %KEYSTORE_KEYPASS% -signedjar %SIGNED% %UNSIGNED% %KEYSTORE_ALIAS%
@echo 簽名完成!
 
del /F /Q %OPT%
#zipalign在android 的SDK中,可以新增環境變數或者直接拷貝到當前目錄
.\zipalign  4 %SIGNED% %OPT%
@echo 優化完成!
 
del /F /Q %UNSIGNED%
del /F /Q %SIGNED%
@echo 操作完成!
 
@pause