2013-03-11 66 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

相关问题