2

我有这样一个问题:我有一些 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 文件并用我的证书对其进行签名。完毕。

我有两个问题:

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

谢谢!

4

2 回答 2

2

我解决了这个问题!这是解决方案,也许有人会发现它有用。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 的副本并将其重命名为 AndroidSampleApp.zip

copy %app_input_file_name% %tmp_app_name%

rem 2. 从 AndroidSapleApp.zip 文件中提取文件夹 res/ 到根文件夹。

%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. 使用压缩方法 Store 将修改后的 res/ 文件夹添加到 AndroidSapleApp.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. *.apk 上的 zipalign:

%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
于 2013-03-12T17:37:56.420 回答
1

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

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

此处的绘图:http: //developer.android.com/tools/building/index.html以图形格式显示了这一点。

修改后的工作流程可能有效:

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

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

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

……嗯……祝你好运……

于 2013-03-11T20:23:33.643 回答