当前位置: 首页 > news >正文

RK3576-Android15-解决此应用专为旧版 Android 系统打造。它可能无法正常运行,也不包含最新的安全和隐私保护功能。请检查是否有更新,或与应用开发者联系 相关问题

提示:RK3576-Android15-解决此应用专为旧版 Android 系统打造。它可能无法正常运行,也不包含最新的安全和隐私保护功能。请检查是否有更新,或与应用开发者联系 相关问题

文章目录

  • 前言
  • 一、需求
  • 二、参考资料
  • 三、修改文件
  • 四、实现方案
  • 五、源码解析
    • 从UI显示着手-找关联的String 字符串
    • 根据StringId 追踪Java层代码
    • 根据弹框-找具体位置不让显示
    • AppWarnings 源码分析
      • 根据DeprecatedTargetSdkVersionDialog 找到show 业务
      • showDeprecatedTargetSdkDialogUiThread 是哪里调用的?
      • Handler 消息-MSG_SHOW_DEPRECATED_TARGET_SDK_DIALOG
      • 跟踪 showDeprecatedAbiDialog 方法逻辑
      • showDeprecatedTargetDialog 方法跟踪
  • 六、知识点扩展
  • 总结

前言

Android app 内置应用或者 客户自己安装应用,在Android15 版本上总是提示一些警告内容或者提示后app 都无法使用的。 这里就是了解相关内容,达到app 内置或者安装后可用状态!

一、需求

去掉提示弹框,让App 可用

二、参考资料

之前有相关内容的解决方案输出,是另外一个提示,但是分析源码,解决问题思路完全一致,修改的内都一样的。
RK3576-Android15-内置32位应用-此应用与最新版 Android 不兼容。请检查是否有更新,或与应用开发者联系 弹框问题解决

三、修改文件

/frameworks/base/services/core/java/com/android/server/wm/AppWarnings.java

四、实现方案

在方法中添加自己需要释放过滤不拦截的包名即可:

privatebooleanisWhiteList(Stringname){if("com.cghs.stresstest".equals(name)||"com.DeviceTest".equals(name)||"android.rk.RockVideoPlayer".equals(name)||"com.android.rk".equals(name)||"com.gitvdemo.video".equals(name)||"com.dangbei.dbmusic".equals(name)||"com.iflytek.aiint.app.speechassistant".equals(name)||"com.rockchip.devicetest".equals(name)){returntrue;}returnfalse;}

五、源码解析

从UI显示着手-找关联的String 字符串

首先,这样的弹框,一般都是Framework层的弹框,所有方向就是在framework 层找一找字符串,看看。
在framework层目录,直接搜索:

grep-rn"此应用专为旧版 Android 系统打造"

结果如下:

base/core/res/res/values-zh-rCN/strings.xml:2037:<string name="deprecated_target_sdk_message"msgid="5246906284426844596">"此应用专为旧版 Android 系统打造。它可能无法正 常运行,也不包含最新的安全和隐私保护功能。请检查是否有更新,或与应用开发者联系。"</string>PowerEdge-R730:~/Android/rk/Android15_002/Rockchip_Android15.0_Express_SDK_Release/frameworks$

根据StringId 追踪Java层代码

直接在framework层搜索:grep -rn deprecated_target_sdk_message,找到先关的类:base/services/core/java/com/android/server/wm/DeprecatedTargetSdkVersionDialog.java:

根据弹框-找具体位置不让显示

如上,找到弹框:DeprecatedTargetSdkVersionDialog.java, 直接看看它在哪里弹出来,屏蔽掉就可以了。
所以,继续搜索:grep -rn DeprecatedTargetSdkVersionDialog,找到AppWarnings.java

AppWarnings 源码分析

根据DeprecatedTargetSdkVersionDialog 找到show 业务

搜索DeprecatedTargetSdkVersionDialog即可,如下:

/** * Shows the "deprecated target sdk version" warning for the given application. * <p> * <strong>Note:</strong> Must be called on the UI thread. * * @param ar record for the activity that triggered the warning */@UiThreadprivatevoidshowDeprecatedTargetSdkDialogUiThread(@NonNullActivityRecordar){finalintuserId=getUserIdForActivity(ar);DeprecatedTargetSdkVersionDialogdeprecatedTargetSdkVersionDialog;if(mDeprecatedTargetSdkVersionDialogs!=null){deprecatedTargetSdkVersionDialog=mDeprecatedTargetSdkVersionDialogs.get(userId);if(deprecatedTargetSdkVersionDialog!=null){deprecatedTargetSdkVersionDialog.dismiss();mDeprecatedTargetSdkVersionDialogs.remove(userId);}}if(!hasPackageFlag(userId,ar.packageName,FLAG_HIDE_DEPRECATED_SDK)){deprecatedTargetSdkVersionDialog=newDeprecatedTargetSdkVersionDialog(AppWarnings.this,getUiContextForActivity(ar),ar.info.applicationInfo,userId);deprecatedTargetSdkVersionDialog.show();if(mDeprecatedTargetSdkVersionDialogs==null){mDeprecatedTargetSdkVersionDialogs=newSparseArray<>();}mDeprecatedTargetSdkVersionDialogs.put(userId,deprecatedTargetSdkVersionDialog);}}

showDeprecatedTargetSdkDialogUiThread 是哪里调用的?

继续追踪代码:原来是通过Handler 发消息 ,监听到消息就展示出来弹框

Handler 消息-MSG_SHOW_DEPRECATED_TARGET_SDK_DIALOG

哈哈,这个MSG_SHOW_DEPRECATED_TARGET_SDK_DIALOG提示
跟踪到如下代码:

publicvoidshowDeprecatedTargetDialog(ActivityRecordr){removeMessages(MSG_SHOW_DEPRECATED_TARGET_SDK_DIALOG);obtainMessage(MSG_SHOW_DEPRECATED_TARGET_SDK_DIALOG,r).sendToTarget();}

跟踪 showDeprecatedAbiDialog 方法逻辑

接上面分析,跟踪showDeprecatedAbiDialog,它是在showDeprecatedAbiDialogIfNeeded方法中调用的

showDeprecatedTargetDialog 方法跟踪

接上面逻辑:showDeprecatedTargetDialog跟踪,最终找到showDeprecatedTargetDialogIfNeeded方法。

哈哈哈,这里不就找到了一个白名单机制:isWhiteList,添加自己包名过滤掉就可以了。

六、知识点扩展

其实很多类似的提示、弹框 基本上都是走的AppWarmings 逻辑,如下:

总结

  • 高版本中各种对低版本的限制,对应的如何修改需要有自己的思路。
  • 整篇日志其实就是解决问题思路,找源码、在源码里面找相关的。
  • 其实 分析的过程中,各个节点都可以进行屏蔽,只是在顶层解决问题更好。 找一个适当位置 过滤掉就可以了。
http://www.jsqmd.com/news/1213566/

相关文章:

  • Translumo终极指南:Windows平台最强实时屏幕翻译工具如何解决你的语言障碍
  • 最新快讯余杭新政!黄金回收持证经营全覆盖,合扬盘点全区正规连锁网点 - 好物测评局
  • 实战解析:如何安全实现英雄联盟国服运行时内存动态修改
  • 053、LSC镜头阴影校正:从理论模型到产线标定
  • AEUX终极指南:3分钟实现Sketch/Figma到After Effects的无缝动画转换
  • 关于图论【深度优先搜索的理论基础】
  • WeChatExtension-ForMac:Mac微信插件的高性能架构设计与技术实现深度解析
  • 【2024最全n8n AI教程】:覆盖12类高频场景(邮件智能分类/会议纪要生成/多平台数据聚合)
  • 3分钟快速配置PvZ Toolkit:植物大战僵尸PC版终极修改器完全指南
  • 深入解析GPIO中断与唤醒机制:从寄存器配置到低功耗设计实践
  • Diablo Edit2:告别重复刷怪,3步打造你的暗黑破坏神II完美角色
  • 真力时中国区直营官方售后服务中心|抛光翻新维修门店权威公示(2026 年 7 月最新) - 亨得利客户服务中心
  • 为什么你需要洛雪音乐助手桌面版:5个理由告别传统音乐软件
  • 5分钟快速配置:AutoScreenshot终极自动化截图工具指南
  • Navicat重置脚本终极指南:3种方法告别Mac版14天试用限制
  • 终极Windows 11部署指南:让任何电脑都能运行最新系统的完整方案
  • SuperPNG终极指南:Photoshop PNG导出质量与压缩的完整解决方案
  • 深入解析USB设备控制器核心寄存器:DCTL、DEVTEN与DSTS的实战应用
  • Win10系统性能优化:8个关键设置提升运行速度
  • O2O浪潮下的家政服务管理系统:功能架构、行业痛点与数字化实战
  • NS-USBLoader移动版终极指南:Android手机直连Switch的快速游戏传输方案
  • 沈阳哪家闲置名表回收靠谱?7家实体门店深度解析 - 一日一测评
  • 为什么你的Suno AI 歌曲总被平台限流?3类高频违规音频特征+实时检测工具链部署教程
  • 如何5分钟内解锁英雄联盟国服全皮肤?R3nzSkin内存级换肤技术深度解析
  • 深入解析MibSPI DMA控制寄存器:嵌入式SPI通信效率优化实战
  • 终极指南:WorkshopDL - 无需Steam客户端,跨平台下载创意工坊模组
  • 如何快速提升嵌入式设备性能:Amlogic S9xxx Armbian终极优化指南
  • migration-tools社区贡献指南:如何参与开源迁移工具开发
  • 如何高效批量获取知网文献:CNKI-download自动化工具完全指南
  • 英雄联盟国服免费换肤完整指南:5分钟解锁全皮肤体验