Android11预装v2签名system/app无法正常运行
最近给客户预装系统App 将他们的apk编译到system/app/ 目录开机之后可以看见apk是正常编译到了system/app/SignagePlayer/SignagePlayer.apk但是开机之后发现app没有正常被系统扫描到看了一下apk自带了lib库文件于是修改Android.mk文件把arm64的so库文件编译到system/app/SignagePlayer/lib/arm64/ 目录。LOCAL_PATH : $(call my-dir) # Native libs of the app, extracted from the APK into lib/isa/ below. # PMS never extracts native libs from an APK preinstalled on /system; it # only loads them from the lib/isa/ dir next to the APK (isa dir names: # arm64-v8a - arm64, armeabi-v7a - arm). Without these the package is # dropped at scan time and the app disappears. signage_so_names : \ libapp \ libdartjni \ libdatastore_shared_counter \ libflutter \ libmediakitandroidhelper \ libmpv \ libserialport # Only the 64-bit libs are installed: the device runs a 64-bit primary ABI # (arm64-v8a) and the app never spawns 32-bit processes, so lib/arm/ would # be dead weight (PMS matches the ABI against the so list inside the APK; # only the runtime load path uses these extracted files). Add arm back # here and extract lib/armeabi-v7a if a 32-bit fallback is ever needed. signage_so_abis : arm64 # One ETC prebuilt per .so, installed into system/app/SignagePlayer/lib/isa/ define make-signage-so-module include $$(CLEAR_VARS) LOCAL_MODULE : signage_$(1)_$(2) LOCAL_MODULE_CLASS : ETC LOCAL_MODULE_STEM : $(1).so LOCAL_SRC_FILES : lib/$(2)/$(1).so LOCAL_MODULE_PATH : $(TARGET_OUT_APPS)/SignagePlayer/lib/$(2) include $$(BUILD_PREBUILT) endef $(foreach abi,$(signage_so_abis),\ $(foreach so,$(signage_so_names),\ $(eval $(call make-signage-so-module,$(so),$(abi))))) signage_so_modules : $(foreach abi,$(signage_so_abis),\ $(foreach so,$(signage_so_names),signage_$(so)_$(abi))) include $(CLEAR_VARS) LOCAL_MODULE : SignagePlayer LOCAL_MODULE_CLASS : APPS LOCAL_MODULE_TAGS : optional LOCAL_BUILT_MODULE_STEM : package.apk LOCAL_MODULE_SUFFIX : $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE : PRESIGNED LOCAL_SRC_FILES : Signage_Player_8.2.6_regency.apk LOCAL_MULTILIB : both LOCAL_REQUIRED_MODULES $(signage_so_modules) include $(BUILD_PREBUILT)开机之后app还是没有出现。对比看了一下apk的文件大小和md5发现编译到out目录的apk文件大小和md5 都和原来不一样了。查找了一下发现原来是 这里build/make/core/app_prebuilt_internal.mk对PRESIGNED 预装 APK编译时无条件执行ZIP2ZIP -0把 APK 内所有压缩的 so 重写为未压缩存储之后只做 zipalign、不重新签名。重写 zip 必然破坏 v2/v3 签名块v1签名不受影响 → PMS 扫描时签名收集失败之前pm install测出的NO_CERTIFICATES就是这个→ 包被静默丢弃。修改一下对于保持自身签名的apk不要解压so重写apk这样不会破坏apk签名。apk自带的lib库需要手动解压拷贝到system/app/xxx/lib至于重新签名的apk解压就无所谓破坏签名了反正是重新签名。解压so有个好处是可以不用手动解压apk的lib库不用拷贝so文件到system/app/xxx/lib目录从Android8.0开始就有了这个机制。ifneq ($(LOCAL_CERTIFICATE),PRESIGNED) # ITEMP: rewriting lib entries with ZIP2ZIP breaks the v2/v3 APK Signing # Block of PRESIGNED prebuilts (no re-sign happens for them), so the # package fails PackageManager certificate collection and is silently # dropped from /system. Only uncompress for apks we re-sign ourselves. $(uncompress-prebuilt-embedded-jni-libs) endif这样重新编译之后生成apk文件大小md5都和源文件一致烧录固件开机之后apk正常运行~

相关新闻

Node.js接入图像生成与编辑API:从文生图到局部重绘实战

Node.js接入图像生成与编辑API:从文生图到局部重绘实战

那种“标题看着简单,真上手一堆暗坑”的项目,最近刚好把某套支持图像生成与编辑的 API 完整接入了一个 Node.js 后台服务,整个流程跑通之后回头整理这份教程。这套接口在 2.5 版本里同时支持从文本描述直接生成图片、基于已有图片做二次编辑&…

2026/10/12 10:16:57 阅读更多 →
C++可变参数模板实战:从参数包展开到完美转发与日志应用

C++可变参数模板实战:从参数包展开到完美转发与日志应用

如果你写过几个重载版本只是为了处理参数个数不同,比如Log(const std::string& s)、Log(const std::string& s, int v)、Log(const std::string& s, int v, double d)……那你应该能理解我当初看到C11可变参数模板时的激动劲。做了一阵子C开发后你会发现…

2026/10/12 10:15:58 阅读更多 →
告别脚本堆:接口与UI自动化测试框架的分层设计实践

告别脚本堆:接口与UI自动化测试框架的分层设计实践

每个人都在说“要搭一套自动化测试框架”,可真到动工时,大多数团队只是把几十个零散的脚本堆到一个仓库里,再用Jenkins定时跑一遍,就对外宣称“我们有自动化测试了”。这种状态不是框架,只能算“脚本集合”。所谓框架&…

2026/10/12 10:16:02 阅读更多 →

最新新闻

大一新生年入百万?拆解流量造神背后的真实玩法与路径

大一新生年入百万?拆解流量造神背后的真实玩法与路径

大一新生,年入100万,别人都叫他“天才小火炬”。这种标题这两年刷到过不止一次,第一反应基本都是“又一个流量造神”。但把这些案例里的账号内容、产品路径、粉丝互动记录翻了很多遍之后,有一个结论我越来越确定:这里面…

2026/10/12 13:02:11 阅读更多 →
召合消除算法求解:从状态编码到A*搜索的工程实践

召合消除算法求解:从状态编码到A*搜索的工程实践

1. 从“消消乐”到算法题:召合消除问题的本质拆解第一次看到“召合消除”这个词,很多人会愣一下——这到底是个什么玩意儿?其实说白了,它就是一类在网格棋盘上通过交换相邻元素、凑齐三个或以上相同元素来触发消除的益智玩法的统称…

2026/10/12 13:02:11 阅读更多 →
Spring Boot接入MCP:让Java服务无缝对接AI应用的实战指南

Spring Boot接入MCP:让Java服务无缝对接AI应用的实战指南

1. 为什么每个Spring Boot开发者都该认真看看MCP 1.1 我遇到的服务接入难题 这两年我陆续接到好几个"把内部服务开放给AI使用"的需求,每次都被折腾得够呛。服务本身不难写,难的是对方AI应用的接入方式千奇百怪:有的要求按插件规范…

2026/10/12 13:02:11 阅读更多 →
C++从零实现分数类:精确四则运算与边界处理

C++从零实现分数类:精确四则运算与边界处理

1. 从整数除法的一个坑说起:为什么需要自己实现分数类很多刚接触C的朋友都写过类似这样的代码:计算1/2 1/3,然后发现结果输出是0。原因很简单,1/2在C里执行的是整数除法,结果是0而不是0.5。就算换成double&#xff0c…

2026/10/12 13:02:11 阅读更多 →
图片翻译六步流程:从OCR识别到译文回填的完整实战指南

图片翻译六步流程:从OCR识别到译文回填的完整实战指南

图片里夹着文字这件事,放在几年前还不太折腾人,大不了照着键盘一个字母一个字母敲。可现在谁手机里没有几十张截图、合同照片、PPT翻拍?尤其做外贸、读论文、追外漫、玩外服游戏的时候,满屏蝌蚪文真是让人头大。你去搜“图片翻译”…

2026/10/12 13:02:10 阅读更多 →
6.4k Stars!用Claude Code写论文的全套流水线,有人打包开源了:TaoToken统一Key接入实操

6.4k Stars!用Claude Code写论文的全套流水线,有人打包开源了:TaoToken统一Key接入实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 13:01:10 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →