如何将文件放入准备使用apk的res文件夹?

时间:2013-03-11 17:21:55

标签: android batch-file zip 7zip

我有这样的问题:我有一些test.apk文件。有一个包含所有图形资源的res文件夹。我需要写下.bat文件给艺术家做下一步: 1.从外部文件夹获取资源,并用新的和重新打包的apk文件替换当前资源。

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文件并使用我的证书对其进行签名。完成。
  5. 我有两个问题:

    1. 如何使用批处理命令压缩/解压缩文件?
    2. 如何使用新证书签署我的新文件夹?
    3. 谢谢!

2 个答案:

答案 0 :(得分: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.验证一切正常

%jarsigner_tool_path% -verify %app_output_file_name%

rem 10. zipalign on * .apk:

%zipalign_tool_path% -v -f 4 %app_output_file_name%

rem 11.删除旧应用:adb uninstall com.partypoker.poker

rem adb uninstall com.packagename

rem 12.将应用安装到模拟器/设备。

rem adb install AndroidSapmleApp.apk

答案 1 :(得分:1)

OP不会试图偷窃"别人的应用程序。他试图将编写Java代码的过程与创建图形的过程分开,并让图形创建过程在Java代码编译之后发生。这是一件非常合理的事情 - 但如果不是不可能的话,这可能会非常困难。

问题是apk中的资源已被aapt编译为内部格式。替换也必须采用这种内部格式。但是,在编译过程中,aapt会生成定义资源ID的R类。这个R类必须可供Java编译器使用,以便编译的dex文件将使用正确的资源ID。

此处的图纸:http://developer.android.com/tools/building/index.html以图形格式显示。

可能有效的修订工作流程:

使用占位符图形的Java开发人员构建应用程序,但不包括apkbuilder步骤。

  • 图形开发人员创建漂亮的图片 - 将自己限制在预先存在的占位图形(即编辑它们但不添加新图片或删除旧图片。)
  • 批处理文件运行aapt - 它必须能够访问整个原始res目录,以确保生成的ID匹配。
  • 批处理文件运行apkbuilder以生成未签名的apk。
  • 然后根据需要对apk进行zipaligned,proguarded和签名。

设置它的最佳方法可能是从现有的Ant构建脚本开始,并创建一个新的Ant构建脚本来支持所需的工作流。

......嗯...祝你好运....