我正在尝试重新签署 Android .apk。即它目前是自签名的,我希望用官方证书重新签名。
为此,我
- 下载构建档案
- 将其从 name.apk 重命名为 name.zip
- 提取拉链
- 删除 META-INF
- 压缩备份目录
- 将 .zip 重命名为 .apk
- 使用 jarsigner 使用官方密钥库对 .apk 进行签名
- 对已签名的 .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.
是什么导致此消息出现?似乎很可能是相关的。