2016-03-07 64 views
0

我正在尝试重新签署Android .apk。即现在是自签名的,我希望用官方证书重新签名。防止zipalign压缩.wav文件

要做到这一点,我

  1. 下载构建归档
  2. 从name.apk重命名为name.zip
  3. 解压缩ZIP
  4. 删除META-INF
  5. 邮编备份目录
  6. 将.zip重命名为.apk
  7. 将.apk签名为官方密钥库使用的jarsigner
  8. 运行的zipalign对.apk文件签署

但是当我上载和运行.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. 

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

回答

0

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

+0

但我怎么能避免压缩正式密钥库?现有的版本不会压缩wav文件,我希望这样做? –

0

得到了工作同事的解决方案。基本上我不应该提取档案。要解决此我做了以下

  1. 下载构建归档
  2. 从name.apk重命名为从name.zip

例如name.zip

  • 删除META-INF

    7z d name.zip META-INF 
    
  • 将.zip重命名回的apk
  • 签署。APK使用的jarsigner
  • 运行的zipalign对签署的apk