【问题标题】:Can an APK be repacked after a minor text edit?可以在少量文本编辑后重新打包 APK 吗?
【发布时间】:2012-04-26 17:30:26
【问题描述】:

我正在创建一个软件,它将引导用户通过几个步骤来发布一个 android 应用程序(APK 文件)。

我这样做的方式是,APK 文件已经编译,我需要做的就是替换包中的 XML 文件,这将改变应用程序的行为。我现在的大问题是,解压缩 apk 文件并进行任何微小的文本编辑,然后再次打包,会破坏签名并阻止应用程序在任何设备上运行,从而给出签名不正确的消息。

我该如何解决这个问题?我想安全地打开 APK,在文本文件中写入一些内容,然后再次关闭它。请注意,此操作将在用户的计算机上完成(在他购买我们的应用程序之后),因此我们正在寻找一个没有特殊要求的命令行工具,如 JDK。

有什么帮助吗?

【问题讨论】:

  • 这是我得到的错误:失败 [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
  • 所以用户购买了您的应用程序,然后他们必须解包 APK,进行更改并重新打包,然后将更新安装到他们的设备上?认真的吗?
  • 你误会了。所有这些对用户来说都是无缝的。用户经过多次点击,然后程序(在后台)将更新 APK 文件。用户只会看到一个很大的“发布”按钮,不知道发生了什么。
  • 用户将选择一些颜色、一些图像、在 GUI 中拖放东西等。这就是真正的应用程序。一旦他点击发布,我将他的所有输入收集到一个 XML 中,并希望将其放入 APK 文件中。
  • 你不能那样做。只需收集更改并将 XML 保存到内部或外部存储。您不能让用户按照您描述的方式重写 APK。

标签: android mobile air apk


【解决方案1】:

好的,我找到了最好的“经过测试”的解决方案 - 我将它发布在这里是为了节省其他开发人员在谷歌上搜索的时间。唯一的缺点是我会要求客户在他的机器上安装 JDK,很遗憾。原因是我没有找到任何纯粹在windows上工作的apk签名工具,不依赖JDK。

我使用 Air 创建了我的 android 应用程序,所以这对我来说很容易 - 所有的 air 文件都被视为资源资产。因此,请准备好您的 APK 存档文件。

准备好修改后,将它们放入名为“assets”的临时文件夹中。您将使用 7-zip 命令行工具(免费:http://sourceforge.net/projects/sevenzip/)来更新您的 apk 的内容。要让它与您的 apk 一起使用,您必须将 apk 的扩展名重命名为 zip - 不用担心,您稍后会改回来。

现在从包含您的 apk 文件(zip 扩展名)和资产文件夹的位置的 .bat 文件(或直接在命令提示符中),您将调用:7za u APK-file.zip assets

现在您的 apk 文件已更新。将其重命名为 .apk 扩展名

现在您将从https://code.google.com/p/signapk/ 使用signAPK 工具,并注意这是唯一需要安装JDK 的步骤。它还假设您已准备好密钥文件(替换包中包含的虚拟文件)。提取文件内容并调用:java -jar signapk.jar key.x509.pem key.pk8 [android_app].apk [signed_android_app].apk

最后,您可能会发现您签名的 apk 文件大小急剧增加。所以你需要使用android的zipAlign工具:(该死,不能发布链接,因为新用户最多只能发布两个超链接) 您将调用命令: zipAlign -c 4 [signed_android_app].apk

瞧!这就是我要走的路线。

如果有人找到了一种不依赖 JDK 来进行签名过程的方法(假设密钥文件已准备好),请分享。

【讨论】:

【解决方案2】:

我该如何解决这个问题?

你没有。如果您修改了 APK 文件,无论如何都必须重新签名。

【讨论】:

    【解决方案3】:

    Android apk 文件必须经过签名。该签名证明 apk 的内容并未从最初发布的内容中修改。 (这正是你正在做的。)签名的同时,也证明了作者是谁。

    所以在一个普通的签名 apk 文件中:

    1. 你知道作者是谁。 (即使它不是你作为人类可以理解的东西。)
    2. 您知道这些内容是作者放在那里的,此后没有修改过。

    这是 Android 中内置的一项关键安全措施,其存在是有充分理由的,而且无法克服。它可以防止病毒之类的东西嵌入到无辜的 apk 文件中。

    【讨论】:

    • 但是我找到了可以修改您的 apk 内容的工具 - 但它们需要 JDK。
    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多