news 2026/5/1 11:08:31

MTK-内置Apk到系统不成功案例分析并解决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MTK-内置Apk到系统不成功案例分析并解决

提示:MTK-内置Apk到系统不成功案例分析并解决

文章目录

  • 前言-场景
  • 一、实际问题:系统开机后并没有看到内置成功的APK
  • 二、解决方案选型-思路
    • 方案一:静默安装
    • 方案二:找出安装失败的原因并解决
  • 三、实现方案
    • 解决方案
      • 修改文件
      • 实现方案-修改
    • 解决问题步骤分析
      • 1、日志分析
      • 2、查找错误日志关联源码`ApkSignatureVerifier.java`
      • 3、ApkSignatureVerifier 关联点分析-verifyV3AndBelowSignatures方法
      • 4、PackageParser 签名文件方法-unsafeGetCertsWithoutVerification
      • 5、PackageParser 签名文件方法去掉`must use v2 signing scheme` 判断、默认SignatureSchemeVersion.JAR 签名
  • 四、知识点扩展
    • 签名版本问题
    • V1和V2签名对比
  • 总结

前言-场景

场景:定制系统中,内置客户apk 作为系统apk,也就是预安装客户apk

  • apk 可能作为普通应用但是不允许卸载、可卸载下恢复出厂设置要求恢复
  • apk 可能是系统LAUNCHER 开机自启
  • 手动安装apk是可以安装成功的

一、实际问题:系统开机后并没有看到内置成功的APK

  • apk 内置成功,编译AOSP后再 out 目录是存在这个apk 的,但是实际开机后并没有看到这个apk。
  • 从用户角度说就是内置不成功;从研发角度就是内置成功但是安装不成功

二、解决方案选型-思路

方案一:静默安装

静默安装实现,这种情况下需要反复验证,方案多样,实现功能即可。但是静默安装的apk 一定是可以被卸载的,不分定制需求达不到要求

方案二:找出安装失败的原因并解决

以MTKAndroid13 版本为例,发现安装失败了,那么就把源码切换到 debug 版本,编译,查看日志到底什么问题

三、实现方案

解决方案

修改文件

/frameworks/base/core/java/android/content/pm/PackageParser.java/frameworks/base/core/java/android/util/apk/ApkSignatureVerifier.java

实现方案-修改

PackageParser.java中,去掉V2 签名

ApkSignatureVerifier.java中去掉系统标准的判断SIGNING_BLOCK_V2,默认SignatureSchemeVersion.JAR,如下:

解决问题步骤分析

1、日志分析

日常开发中,系统工程师都是用的user版本出版本,默认就是user版本。没法开机后就答应日志,那么先切换到userdebug版本,编译、烧录、打印日志,查看到错误如下:
果然出现在签名上面,日志显示应用签名版本不对No APK Signature Scheme v2 signature in package /system/app/jst_reeadai/jst_reeadai.apk

2、查找错误日志关联源码ApkSignatureVerifier.java

搜索大法:grep -rn "No APK Signature Scheme v2 signature in package"

3、ApkSignatureVerifier 关联点分析-verifyV3AndBelowSignatures方法

根据上面,找到ApkSignatureVerifier点对应位置,如下:
路径:frameworks/base/core/java/android/util/apk/ApkSignatureVerifier.java

反推,分别找到如下调用链代码:verifyV3AndBelowSignatures -> verifySignaturesInternal -> verifySignatures -> unsafeGetCertsWithoutVerification

那么unsafeGetCertsWithoutVerification方法是在哪里调用的?
这里就先看 路径:frameworks/base/core/java/android/content/pm/PackageParser.java文件吧

4、PackageParser 签名文件方法-unsafeGetCertsWithoutVerification

如上分析,这里就分析PackageParser类对应的方法,如下:

这里最大的收获就是看到了相关的代码:

  • 获取最小的签名SchemeVersionForTaskSDK
  • isStaticSharedLibrary来判断是否启用must use v2 signing scheme

5、PackageParser 签名文件方法去掉must use v2 signing scheme判断、默认SignatureSchemeVersion.JAR 签名

修改方案如下:
路径:/frameworks/base/core/java/android/content/pm/PackageParser.java修改如下:

路径:/frameworks/base/core/java/android/util/apk/ApkSignatureVerifier.java修改如下:

四、知识点扩展

签名版本问题

这里了解下签名版本,定义:路径/frameworks/base/core/java/android/content/pm/SigningDetails.java

签名方案概览

版本引入版本主要特性验证位置向后兼容
JAR (v1)Android 1.0传统 JAR 签名META-INF/所有版本
v2Android 7.0 (API 24)全 APK 完整性保护APK Signing Block
v3Android 9.0 (API 28)密钥轮换支持APK Signing Block
v4Android 11 (API 30)增量安装优化独立 .apk.idsig 文件Android 11+

V1和V2签名对比

特性JAR 签名 (v1)v2 签名 (v2)
签名位置META-INF/ 目录APK Signing Block
完整性保护仅保护文件内容保护整个 APK(包括 ZIP 元数据)
性能逐个文件验证,较慢整体验证,更快
防篡改能力较弱,可修改 ZIP元数据 强,保护所有字节
Android 支持所有版本Android 7.0+
兼容性需要同时包含v1 可单独使用(7.0+)

总结

  • 遇到问题一定要看日志,可能看日志成本蛮高的,后续可以自己写一个日志工具,通过属性来实现是否保存日志
  • 找到问题后,对于签名本身很复杂的问题,在无专业知识情况下根据经验尝试更改下
  • 遇到问题,解决问题时候,多看源码,根据经验靠猜+实践验证,一步一步解决问题
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 10:22:23

最近在研究Amesim的电池热管理模块,发现这玩意儿真的挺有意思。如果你也在搞这块,可能会遇到一些坑,今天就来聊聊我的一些学习心得,顺便分享几个模型

amesim电池热管理学习资料附带模型(多个)首先,Amesim的电池热管理模块主要分为两部分:电池模型和热管理模型。电池模型用来模拟电池的电化学行为,而热管理模型则是用来控制电池的温度。这两部分结合起来,才…

作者头像 李华
网站建设 2026/4/30 11:16:48

SC4D30120D 碳化硅肖特基二极管

在新能源革命与工业智能化浪潮的推动下,碳化硅(SiC)功率器件凭借耐高温、低损耗、高频化的核心优势,成为光伏储能、工业控制、应急电源等领域的 “性能核心”。作为深耕碳化硅领域的创新企业,杰盛微半导体重磅推出SC4D…

作者头像 李华
网站建设 2026/5/1 4:59:49

MSP1R2C3M13D伺服电机

MSP1R2C3M13D 是松下(Panasonic)的一款交流伺服电机型号,属于高性能、小型化伺服电机系列,适用于需要精确控制的位置、速度和力矩的工业自动化系统。以下是详细信息整理:MSP1R2C3M13D 伺服电机主要特点高精度闭环控制支…

作者头像 李华
网站建设 2026/4/30 11:29:35

UVa 10824 Regular Polygon

题目描述 给定 NNN (0<N≤20000 < N \le 20000<N≤2000) 个位于同一圆周上的点&#xff0c;这些点所在圆的圆心是原点。你的任务是找出这些点能够构成多少个不同边数的正多边形。例如&#xff0c;如果有 666 个点恰好是一个正六边形的顶点&#xff0c;那么就说这些点构…

作者头像 李华
网站建设 2026/5/1 5:42:49

AutoGPT自动提交Bug报告并跟踪修复进度

AutoGPT自动提交Bug报告并跟踪修复进度 在现代软件系统的运维现场&#xff0c;凌晨三点的告警电话早已不是新鲜事。当监控系统突然弹出数百条错误日志时&#xff0c;工程师往往需要花数小时才能理清头绪&#xff1a;哪些是偶发抖动&#xff1f;哪些是真正值得跟进的缺陷&#x…

作者头像 李华
网站建设 2026/5/1 5:47:18

Qwen3-14B长文本处理能力实测:32K上下文下的文档总结效果

Qwen3-14B长文本处理能力实测&#xff1a;32K上下文下的文档总结效果 在企业智能化转型的浪潮中&#xff0c;一个现实问题日益凸显&#xff1a;如何让AI真正“读懂”一份上百页的财报、技术白皮书或法律合同&#xff1f;许多团队尝试用大模型做自动摘要&#xff0c;结果却发现—…

作者头像 李华