2013-03-11 101 views
2

我有這樣的問題:我有一些test.apk文件。有所有圖形資源的res文件夾。我需要爲藝術家編寫.bat文件來做下一步: 1.從外部文件夾獲取資源並用新的和重新包裝的apk文件替換當前資源。如何將文件放入可以使用apk的res文件夾中?

有這樣的文件在APK:

assets META-INF res AndroidManifest.xml classes.dex resources.arsc 

所以,據我瞭解的任務,我需要:

  1. 複製1.apk到1.ZIP
  2. 將1.zip解壓縮到1個文件夾中
  3. 刪除「res」文件夾並在其中放置我自己的文件夾
  4. 創建新的1.apk文件並用我的證書籤名。完成。

我有2個問題:

  1. 如何壓縮與批處理命令/解壓縮文件?
  2. 如何用新證書籤署我的新文件夾?

謝謝!

+0

如果我理解正確,您想要更新已打包的APK中的圖像資源?重新打包簽名的APK不是一個選項嗎?你沒有源代碼嗎? – 2013-03-11 17:29:57

+0

所以你認爲我可以讓我們說Google+應用程序,用我自己的圖像和字符串更改資源,並將其上傳爲Ics +粉紅色?真? – MariusBudin 2013-03-11 17:36:51

+0

2 Alex Fu:我有源代碼。從我的團隊購買藝術家 - 沒有。而且我們遇到了一個問題,那就是他們爲我們提供了不良資源所以我們想給他們一個小工具 - 他們有能力自己測試圖像自己。 – yozhik 2013-03-11 19:24:18

回答

2

我解決了這個問題!這是解決方案,maby有人會發現它有用。 bat文件的命令。

您需要有:7zip存檔程序,Android SDK,JDK 1.7。

鏈接使用,使這個資源: http://developer.android.com/tools/publishing/app-signing.html http://developer.android.com/tools/building/index.html

SET app_input_file_name=%1 
SET tmp_app_name="tmp_app_name.zip" 
SET zip_tool_path="C:\Program Files\7-Zip\7z.exe" 

REM 1. AndroidSampleApp.apk的創建副本,並與AndroidSapmleApp.zip

copy %app_input_file_name% %tmp_app_name% 

REM 2重命名。將文件夾res /從AndroidSapmleApp.zip文件解壓縮到根文件夾。

%zip_tool_path% x %tmp_app_name% res/ 

rem 3.刪除META-INF和res文件夾。

%zip_tool_path% d %tmp_app_name% res 
%zip_tool_path% d %tmp_app_name% META-INF 

在修改資源下一後:

SET app_output_file_name=%1 
SET tmp_app_name="tmp_app_name.zip" 
SET dev_certificate="mycert.keystore" 
SET dev_certificate_alias="mycert" 
SET zip_tool_path="C:\Program Files\7-Zip\7z.exe" 
SET jarsigner_tool_path="C:\Program Files\Java\jdk1.7.0_17\bin\jarsigner.exe" 
SET zipalign_tool_path="D:\SDKs\android-sdk_r18-windows\android-sdk-windows\tools\zipalign.exe" 

REM 4.在提取res文件夾的變化,你不能刪除或添加任何新文件!只改變圖像。 rem 5.使用copmress方法Store將修改後的res /文件夾添加到AndroidSapmleApp.zip。

%zip_tool_path% a %tmp_app_name% res -mx0 

REM 6.卸下RES /文件夾

rmdir res /s /q 

REM 7.重命名AndroidSapmleApp.zip到AndroidSapmleApp.apk

copy %tmp_app_name% %app_output_file_name% 

REM 8.註冊應用程序與證書mycert.keystore

%jarsigner_tool_path% -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore %dev_certificate% %app_output_file_name% %dev_certificate_alias% 

REM 9.驗證是它一切ok

%jarsigner_tool_path% -verify %app_output_file_name% 

REM上*的apk 10的zipalign:

%zipalign_tool_path% -v -f 4 %app_output_file_name% 

REM 11.卸下舊的應用程序:ADB卸載com.partypoker.poker

rem adb uninstall com.packagename 

rem 12.安裝應用程序到模擬器/設備。

rem adb install AndroidSapmleApp.apk 
1

該OP不會試圖「竊取」他人的應用程序。他正試圖將Java代碼的編寫過程與創建圖形的過程分開,並且在編譯Java代碼之後讓圖形創建過程發生。這是一個完全合理的事情要做 - 但可能是非常困難,如果不是不可能的話。

問題是apk中的資源已被aapt編譯成內部格式。替代品也必須採用這種內部格式。但是,在編譯過程中,aapt會生成定義資源ID的R類。這個R類必須對Java編譯器可用,以便編譯的dex文件將使用正確的資源ID。

此處的圖示:http://developer.android.com/tools/building/index.html以圖形格式顯示。

的修訂工作流程可能的工作:

使用佔位圖形Java開發者構建應用程序最多,但不包括apkbuilder一步。

  • 圖形開發人員創建漂亮的圖片 - 限制自己先前存在的PLACEHOLD圖形(即對其進行編輯,但不添加新的或刪除舊的。)
  • 的批處理文件運行AAPT - 它必須有訪問整個原始res目錄以確保生成的ID匹配。
  • 批處理文件運行apkbuilder生成未簽名的apk。
  • 然後apk會根據需要進行zipaligned,編程和簽名。

設置此項的最佳方法可能是從現有的Ant構建腳本開始,並創建一個新的Ant構建腳本以支持所需的工作流。

......恩......好運....

+0

感謝您提供完整的答案,但我只想替換「未編譯的資源」。它可能以更簡單的方式嗎? – yozhik 2013-03-11 22:52:29

相關問題