首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android build apk: control MANIFEST.MF

Android build apk: control MANIFEST.MF
EN

Stack Overflow用户
提问于 2017-08-19 11:27:00
回答 1查看 845关注 0票数 2

Android build apk:

假设一个apk包含一个库jar(例如foo.jar),它具有META-INF/MANIFEST.MF,这对它的运行很重要。但是在APK中有一个包含签名数据的MANIFEST.MF,而lib jar MANIFEST.MF丢失了。

代码语言:javascript
复制
APK
   META-INF/MANIFEST.MF

有没有办法向MANIFEST.MF中添加更多属性,或者将lib jar MANIFEST.MF合并到其中?

更新

解包apk后,在MANIFEST.MF中添加一些属性,重新打包apk。

代码语言:javascript
复制
packageDebug {
   doLast {
      // add attributes to MANIFEST.MF
   }
}

错误:

代码语言:javascript
复制
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为时已晚。

EN

回答 1

Stack Overflow用户

发布于 2018-03-22 01:45:35

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

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

代码语言:javascript
复制
android { 
    packagingOptions {
        excludes {
            pickfirsts = [/file1, ...]
            excludes = []
        }
    } 
}

请看一下文档

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

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

是的,如果您重新打包了一个apk,您需要使用keystore对其进行签名,才能成功安装它。您可以选择使用sdk中的构建工具中的apksigner使用v2/v1(或者对于面向较低api的应用程序,两者)签名方案对其进行签名。

虽然没有必要这样做(如果你已经在你的buildscript中设置了签名配置),但是如果packagingOptions为你工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45767328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档