Android build apk:控制MANIFEST.MF

时间:2017-08-19 03:27:00

标签: android jar apk manifest sign

Android build apk:

假设一个apk包含一个具有META-INF / MANIFEST.MF的库jar(例如foo.jar),这对它起作用很重要。但在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本身没有摘要哈希值。

Scheme V2签名应该在哪里?

有没有办法在apk签名之前修改apk? doLast of packageDebug为时已晚。

1 个答案:

答案 0 :(得分:0)

您应该查看Android Gradle插件的packagingOptions配置块。

它基本上是一个可以以类似方式配置的DSL对象

android { 
    packagingOptions {
        excludes {
            pickfirsts = [/file1, ...]
            excludes = []
        }
    } 
}

查看文档

通常有一个默认过滤器,在第三方库的META-INF下排除正则表达式(在上面的示例中,我们将其设置为空)。

虽然你的用例是什么?因为我没有遇到过需要查找manifest.mf的jar,除了验证内容的完整性。

是的,如果你重新打包一个apk,你需要使用密钥库对其进行签名才能成功安装它。您可以选择使用来自sdk中的构建工具的apksigner使用v2 / v1(或针对较低API的应用的两者)签名方案进行签名。

虽然没有必要这样做(如果您在buildscript设置了签名配置),那么packagingOptions是否适合您。