阻止zipalign压缩.wav文件

时间:2016-03-07 18:11:37

标签: android code-signing zipalign

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

要做到这一点我

  1. 下载构建存档
  2. 将其从name.apk重命名为name.zip
  3. 解压缩
  4. 删除META-INF
  5. Zip备份目录
  6. 将.zip重命名为.apk
  7. 使用官方密钥库使用jarsigner
  8. 签署.apk
  9. 针对已签名的.apk
  10. 运行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: This file can not be opened as a file descriptor; it is probably compressed

    在运行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.
    

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

2 个答案:

答案 0 :(得分:0)

在资源文件夹中打开压缩文件存在限制。这是因为未压缩文件可以直接内存映射到进程虚拟地址空间,因此避免再次需要相同数量的内存进行解压缩。   您可以阅读此article以获得参考资料。

答案 1 :(得分:0)

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

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

    e.g。

    7z d name.zip META-INF
    
    1. 将.zip重命名为.apk
    2. 使用官方密钥库使用jarsigner
    3. 签署.apk
    4. 针对已签名的.apk
    5. 运行zipalign