Android build apk:
假设一个apk包含一个库jar(例如foo.jar),它具有META-INF/MANIFEST.MF,这对它的运行很重要。但是在APK中有一个包含签名数据的MANIFEST.MF,而lib jar MANIFEST.MF丢失了。
APK
META-INF/MANIFEST.MF有没有办法向MANIFEST.MF中添加更多属性,或者将lib jar MANIFEST.MF合并到其中?
更新
解包apk后,在MANIFEST.MF中添加一些属性,重新打包apk。
packageDebug {
doLast {
// add attributes to MANIFEST.MF
}
}错误:
Installation failed with message INSTALL_PARSE_FAILED_NO_CERTIFICATES:
Failed to collect certificates from /data/app/vmdl1096113886.tmp/base.apk:
META-INF/CERT.SF indicates /data/app/vmdl1096113886.tmp/base.apk is signed
using APK Signature Scheme v2, but no such signature was found. Signature stripped?.MANIFEST.MF和CERT.SF都包含相同的摘要哈希。修改MANIFEST.MF后是否需要对apk重新签名?MANIFEST.MF本身没有摘要哈希。
方案V2签名应该在哪里?
有没有办法在apk签名之前修改apk?packageDebug的doLast为时已晚。
发布于 2018-03-22 01:45:35
你应该看看Android Gradle插件的packagingOptions配置块。
它基本上是一个DSL对象,可以用类似的方式进行配置
android {
packagingOptions {
excludes {
pickfirsts = [/file1, ...]
excludes = []
}
}
}请看一下文档
对于第三方库,通常有一个默认筛选器在META-INF下排除正则表达式(在上面的示例中,我们将其设置为空)。
那么你的用例是什么呢?因为除了验证内容的完整性之外,我还没有遇到过需要查找manifest.mf的jar。
是的,如果您重新打包了一个apk,您需要使用keystore对其进行签名,才能成功安装它。您可以选择使用sdk中的构建工具中的apksigner使用v2/v1(或者对于面向较低api的应用程序,两者)签名方案对其进行签名。
虽然没有必要这样做(如果你已经在你的buildscript中设置了签名配置),但是如果packagingOptions为你工作。
https://stackoverflow.com/questions/45767328
复制相似问题