层层剥开Android14升级后异常弹框的神秘面纱

这篇具有很好参考价值的文章主要介绍了层层剥开Android14升级后异常弹框的神秘面纱。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇文章将会通过研究源码的方式给您讲述Android系统升级到Android14后出现的两个异常弹框并给出消除它们的方案。闲话少叙,我们开始。

问题描述

在Android 14升级后,出现两个弹窗的异常情况。这里是异常的截图:

此应用与最新版android不兼容,请检查是否有更新,或与应用开发者联系,Android,移动开发,架构,android,移动开发,framework,架构,面试

接下来,我们对这两个异常弹框依次来分析。

问题分析和解决方案

由于两个异常弹框都是由系统主动弹出的,应用层面没有办法去干扰此流程。因此,要想分析这两个问题,我们只能通过系统源码找到弹框提示文字,进而找到对应的代码查看逻辑,分析源码进而找到解决方案。

问题一

通过搜索关键字 此应用与最新版 Android 不兼容。请检查是否有更新,或与应用开发者联系。,我们能够搜索到在Framework层的字符串资源文件中name为 deprecated_abi_message对应的字符串就是我们搜索的关键字。

此应用与最新版android不兼容,请检查是否有更新,或与应用开发者联系,Android,移动开发,架构,android,移动开发,framework,架构,面试

接下来我们通过namedeprecated_abi_message继续搜索,可以找到该字符串在系统中只在一个地方使用了,以下是它使用的代码:

class DeprecatedAbiDialog extends AppWarnings.BaseDialog {
    //省略无关代码...
    final CharSequence message = context.getString(R.string.deprecated_abi_message);

    final AlertDialog.Builder builder = new AlertDialog.Builder(context)
            .setPositiveButton(R.string.ok, (dialog, which) ->
                    manager.setPackageFlag(
                            mPackageName, AppWarnings.FLAG_HIDE_DEPRECATED_ABI, true))
            .setMessage(message)
            .setTitle(label);
//省略无关代码...
}

很清楚的可以看到这个字符串被使用创建成了一个AppWarnings.BaseDialog类型的弹框。离目标代码很近了,我们继续顺着源码找到DeprecatedAbiDialog类在哪里被调用以及它被调用的逻辑是什么。

通过搜索我们可以找到以下调用:

此应用与最新版android不兼容,请检查是否有更新,或与应用开发者联系,Android,移动开发,架构,android,移动开发,framework,架构,面试

最终我们可以看到弹框的调用逻辑如下:

public void showDeprecatedAbiDialogIfNeeded(ActivityRecord r) {
//省略无关代码...
          if (is64BitDevice && appContainsOnly32bitLibraries) {
              mUiHandler.showDeprecatedAbiDialog(r);
          }
      }

自此我们终于找到了问题1异常弹框的触发逻辑。如果设备为64位指令集并且当前应用仅仅包含32位指令集的包,那么就会弹出问题1的异常弹框。

问题一解决方案

通过对问题1的分析,我们知道如果碰到该提示。我们的问题解决方案是 在项目的build.gradel文件的ndk部分添加arm64-v8a的指令集

此应用与最新版android不兼容,请检查是否有更新,或与应用开发者联系,Android,移动开发,架构,android,移动开发,framework,架构,面试

问题二

分析步骤和问题1一致,我们最终可以找到以下代码:

   /**
      * Shows the "deprecated target sdk" warning, if necessary.
      *
      * @param r activity record for which the warning may be displayed
      */
     public void showDeprecatedTargetDialogIfNeeded(ActivityRecord r) {
         if (r.info.applicationInfo.targetSdkVersion < Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT) {
             mUiHandler.showDeprecatedTargetDialog(r);
         }
     }

当应用设置的targetSdkVersion值大于系统的常量 Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT会被触发。

问题二解决方案

此应用与最新版android不兼容,请检查是否有更新,或与应用开发者联系,Android,移动开发,架构,android,移动开发,framework,架构,面试

通过源码的层层跳转,我们最终可以找到安卓14系统的Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT值为28。因此当要解决问题2,我们设置targetSdkVersion最少为29就能在安卓14上避免异常弹框。

总结

通过从源代码的角度分析安卓 14升级后出现双弹窗异常的原因,并根据调查结果提出解决方案,可以更好地定位问题并实施有效的修复措施。这种方法需要对系统和应用程序的源代码进行深入的检查和理解,并确保修复后的应用程序在新系统上能够正常运行。

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap
文章来源地址https://www.toymoban.com/news/detail-817949.html

到了这里,关于层层剥开Android14升级后异常弹框的神秘面纱的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android14 适配之——targetSdkVersion 升级到 34 需要注意些什么?

    据上一篇文又是一个月过去了,虽说金九银十,但今年的氛围实在是太冷清了,能有一份工就不错了吧。但愿美元加息早点结束,经济早点好起来~ 上一篇所说内容是所有 App 安装到 Android14 设备上的影响和需要注意的内容,本篇接下来就要介绍当 targetSdkVersion 升级到 34 时,

    2024年02月03日
    浏览(35)
  • 解决element UI中 select下拉框 el-select-dropdown el-popper超出el-dialog弹框的问题

    【问题】: 在elementUI 中,el-dialog的内容比较多,出现滚动条,且内容包含input输入框、select下拉框、时间选择器、cascader级联选择器等,在点开select下拉选择框后并向下滚动鼠标,会出现下拉框跑出el-dialog的区域的情况(有可能离el-dialog的区域很远),造成页面的展示效果混

    2024年02月09日
    浏览(50)
  • 借助GPT理解 “ Android中 点击弹框外部 取消弹框”

    在平常的开发工作中 或 阅读技术博客/书籍 时,难免会遇到我们不懂的知识点,网络上搜索的资料 需要有准确性,系统性,可实操性。 这样的资料查询很费时间且还不一定能找到,但是如果借助训练过的的gpt,就会省下大量的时间且学到的知识也是体系化的。 最近借助gp

    2024年01月24日
    浏览(29)
  • uniapp android底部弹框

    uniapp android底部弹框,带有动画效果

    2024年02月14日
    浏览(37)
  • Android之自定义时间选择弹框

    随着产品人员不断变态下,总是会要求我们的界面高大上,随意UI能画出来我们就得搞出来才行,这里有自定义弹框,以及时间选择控件的运用,根据年和月判断当月有多少天,需要什么就copy什么。 代码如下(示例): 代码如下(示例): 代码如下(示例): 代码如下(示

    2024年02月10日
    浏览(43)
  • Android Studio中实现弹出提示框的两种方法

    Android Studio中实现弹出提示框的两种方法 在Android开发过程中,经常需要使用弹出提示框来向用户展示信息或者获取用户的输入。在Android Studio中,我们可以通过两种方法来实现弹出提示框:使用AlertDialog和Toast。 方法一:使用AlertDialog AlertDialog是Android提供的一个用于展示对话

    2024年02月07日
    浏览(41)
  • GitLab-ce版本升级(14.0-14.10)

    GitLab 存在命令注入漏洞,该漏洞源于未经授权的用户可能使用以下命令在服务器上执行任意代码 项目导入功能。以下产品版本受到影响:14.10.5 之前的 14.0、15.0.4 之前的 15.0 和 15.1.1 之前的 15.1 开始的所有版本。 因服务器处于内网环境,使用RPM包进行手动升级 创建备份文件

    2024年02月07日
    浏览(47)
  • 不要升级!不要升级!MacOS 14.4 引发Java 应用崩溃

    如果最近您收到了MacOS 14.4的升级提醒,那么建议你暂时先不要升级! 在x上,Java开发领域的一些大v们,也发现了这个问题,并提醒大家不要升级。 根据Java官方发布的文章了解到,该问题主要是由于macOS上运行的进程可能会访问受保护内存区域中的内存。在 macOS 14.4 更新之前

    2024年03月18日
    浏览(61)
  • 升级还是不升级?iPhone 15和iPhone 14 Plus性能比较

    预览iPhone 15 Pro Max与三星Galaxy S23 Ultra之战是有正当理由的。显然,三星的旗舰智能手机为2023年的所有其他旗舰产品定下了基调——由于其超长的电池寿命和一流的摄像头,证明了它是最受欢迎的产品。 毫不奇怪,Galaxy S23 Ultra不仅是最好的照相手机之一,也是花钱能买到的最

    2024年02月11日
    浏览(45)
  • 升级Xcode14.3,项目无法运行解决

    报错:link command failed with exit code 1(use -v to see invocaiton) 原因:新版本Xcode删除了特定目录下的一些文件 解决:

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包