0

我正在尝试重新签署 Android .apk。即它目前是自签名的,我希望用官方证书重新签名。

为此,我

  1. 下载构建档案
  2. 将其从 name.apk 重命名为 name.zip
  3. 提取拉链
  4. 删除 META-INF
  5. 压缩备份目录
  6. 将 .zip 重命名为 .apk
  7. 使用 jarsigner 使用官方密钥库对 .apk 进行签名
  8. 对已签名的 .apk 运行 zipalign

但是,当我将 .apk 上传并运行到手机时,它会在启动时崩溃。这是由以下错误引起的

Caused by: android.content.res.Resources$NotFoundException: File res/raw/my_file.wav from drawable resource ID #0x7f070002
Caused by: java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed

果然,当我检查控制台日志时,我可以看到 zipalign 正在压缩这个文件

res/raw/my_file.wav (OK - compressed)

它应该这样做

res/raw/my_file.wav (OK)

我怎样才能让 zipalign 不压缩我的 .wav 文件?基于这个答案 Android 不应该压缩 .wav 文件。

FileReader csv : FileNotFoundException: 该文件不能作为文件描述符打开;它可能被压缩了

在运行 zipalign 之前,我还注意到了一个警告。即在我运行 jarsigner 后出现

No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2043-01-30) or after any future revocation date.

是什么导致此消息出现?似乎很可能是相关的。

4

2 回答 2

0

从同事那里得到解决方案。基本上我不应该提取档案。为了解决这个问题,我做了以下

  1. 下载构建档案
  2. 将其从 name.apk 重命名为 name.zip
  3. 从 name.zip 中删除 META-INF

例如

7z d name.zip META-INF
  1. 将 .zip 重命名为 .apk
  2. 使用 jarsigner 使用官方密钥库对 .apk 进行签名
  3. 对已签名的 .apk 运行 zipalign
于 2016-03-08T15:24:07.580 回答
0

在 assets 文件夹中打开压缩文件是有限制的。这是因为解压后的文件可以直接内存映射到进程的虚拟地址空间,从而避免了再次需要相同数量的内存进行解压。您可以阅读这篇文章以获得参考。

于 2016-03-07T18:19:38.103 回答