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

📅 2026/7/18 14:17:22 👁️ 阅读次数 📝 编程学习
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 逻辑,如下:

总结

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