如何将文件放入可以使用apk的res文件夹中?
我有这样的问题:我有一些test.apk文件。有所有图形资源的res文件夹。我需要为艺术家编写.bat文件来做下一步: 1.从外部文件夹获取资源并用新的和重新包装的apk文件替换当前资源。如何将文件放入可以使用apk的res文件夹中?
有这样的文件在APK:
assets META-INF res AndroidManifest.xml classes.dex resources.arsc
所以,据我了解的任务,我需要:
- 复制1.apk到1.ZIP
- 将1.zip解压缩到1个文件夹中
- 删除“res”文件夹并在其中放置我自己的文件夹
- 创建新的1.apk文件并用我的证书签名。完成。
我有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
该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构建脚本以支持所需的工作流。
......恩......好运....
感谢您提供完整的答案,但我只想替换“未编译的资源”。它可能以更简单的方式吗? – yozhik 2013-03-11 22:52:29
如果我理解正确,您想要更新已打包的APK中的图像资源?重新打包签名的APK不是一个选项吗?你没有源代码吗? – 2013-03-11 17:29:57
所以你认为我可以让我们说Google+应用程序,用我自己的图像和字符串更改资源,并将其上传为Ics +粉红色?真? – MariusBudin 2013-03-11 17:36:51
2 Alex Fu:我有源代码。从我的团队购买艺术家 - 没有。而且我们遇到了一个问题,那就是他们为我们提供了不良资源所以我们想给他们一个小工具 - 他们有能力自己测试图像自己。 – yozhik 2013-03-11 19:24:18