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

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

问题描述

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

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

问题分析和解决方案

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

问题一

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

接下来我们通过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类在哪里被调用以及它被调用的逻辑是什么。

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

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

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

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

问题一解决方案

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

问题二

分析步骤和问题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会被触发。

问题二解决方案

通过源码的层层跳转,我们最终可以找到安卓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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/171996.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BigDecimal的常见陷阱

文章目录 BigDecimal概述BigDecimal常见陷阱1.使用BigDecimal的构造函数传入浮点数2.使用equals()方法进行数值比较3.使用不正确的舍入模式 总结&#xff1a; BigDecimal概述 BigDecimal 是 Java 中的一个类&#xff0c;用于精确表示和操作任意精度的十进制数。它提供了高精度的…

软件需求的三大层次,逐层细化的注意事项

需求逐层分解和转化是一个持续优化的过程&#xff0c;在这个过程中&#xff0c;我们需要明确软件需求的三大层次&#xff0c;从而帮助项目团队理解组织或客户的高层目标和期望&#xff0c;满足用户的期望和需求&#xff0c;有助于产品的系统设计和开发。 一、软件需求三大层次 …

【django+vue】连接数据库、登录功能

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【djangovue专栏】 1.【djangovue】项目搭建、解决跨域访问 【djangovue】连接数据库、登录功能 django连接数据库1.安装MySQL驱动程序2.创建数据库3.配置settings.py文件4.创建表5.添加数据 登录功能1.django实现…

国外媒体套餐发稿,快速升级曝光率,数千倍转换率!

在如今数字化时代&#xff0c;国外市场的开拓对企业来说变得越发关键。应对激烈竞争&#xff0c;怎样快速升级曝光率、做到高转换率变成了重要环节。下面我们就详细介绍一种名为“国外媒体套餐内容推广”的思路&#xff0c;根据开发利用国外媒体网络资源&#xff0c;为公司实现…

Linux CentOS 8(DNS的配置与管理)

Linux CentOS 8&#xff08;DNS的配置与管理&#xff09; 目录 一、DNS相关知识1.1 DNS简介1.2 DNS的解析原理1.3 DNS解析 二、DNS服务器部署2.1 不使用chroot模式启动DNS2.2 使用chroot模式DNS 三、DNS配置文件详解3.1 主配文件详解3.2 区域数据库文件详解 四、项目实施4.1 主…

分类问题的评价指标

一、logistic regression logistic regression也叫做对数几率回归。虽然名字是回归&#xff0c;但是不同于linear regression&#xff0c;logistic regression是一种分类学习方法。 同时在深度神经网络中&#xff0c;有一种线性层的输出也叫做logistic&#xff0c;他是被输入…

白银投资的升值空间及未来趋势

在投资多样化的今天&#xff0c;人们可选择的投资产品也越来越多。白银作为具有较高价值的贵金属&#xff0c;一直以来便是仅次于黄金的贵金属投资品种&#xff0c;今年来也受到更多投资者的关注。那么白银的升值空间及未来趋势如何&#xff1f;是否值得投资&#xff1f;这边将…

酒店品牌纷纷冲击中高端,东呈集团能否“快人一步”?

过去两年酒店行业加速洗牌&#xff0c;“强者恒强”的马太效应正持续凸显。 报告显示&#xff0c;2022年排名前10名的酒店集团分别为锦江国际、华住、首旅如家、格林、东呈集团、尚美数智、亚朵、德胧、逸柏、都市酒店。以上10家酒店集团客房规模在连锁酒店市场占有率为62.36&…

Django 入门学习总结3

1、创建数据库 打开mysite/settings.py文件&#xff0c;可以看到我们使用Python中已包含的默认的数据库SQLite&#xff0c;也可以使用其他的数据库&#xff0c;如Oracle、Mysql等。里面也包含时区、语言等设置信息。 在使用数据库和表之前&#xff0c;输入下面的命令&#xf…

electron项目开机自启动

一、效果展示&#xff1a;界面控制是否需要开机自启动 二、代码实现&#xff1a; 1、在渲染进程login.html中&#xff0c;画好界面&#xff0c;默认勾选&#xff1b; <div class"intro">开机自启动 <input type"checkbox" id"checkbox&quo…

01【SpringBoot快速入门、yml语法、自动配置、整合框架】

目录 一、SpringBoot简介 1.1 Spring优缺点 1.1.1 Spring的优点 1.1.2 Spring的缺点 1.2 SpringBoot的概述 1.2.1 SpringBoot概述 1.2.2 SpringBoot的核心功能 二、SpringBoot快速入门 2.1 创建Maven工程 2.2 添加起步依赖 2.3 编写Controller 2.4 编写SpringBoot引…

论文《A recurrent latent variable model for sequential data》笔记:详解VRNN

A recurrent latent variable model for sequential data 背景 1 通过循环神经网络的序列建模 循环神经网络&#xff08;RNN&#xff09;可以接收一个可变长度的序列 x ( x 1 , x 2 , . . . , x T ) x (x_1, x_2, ..., x_T) x(x1​,x2​,...,xT​)作为输入&#xff0c;并通…

JavaWeb开发——文件上传

1 简介 文件上传&#xff1a;将本地图片、视频、音频等文件上传到服务器&#xff0c;供其他用户浏览或下载的过程 文件上传涉及到两部分&#xff1a;前端程序 服务端程序 前端程序 【三要素】&#xff1a;① 需要定义一个form 表单&#xff0c;且表单里需定义一个类型为“ …

Qt专栏3—Qt项目创建Hello World

setp1 打开软件 双击Qt Creator 11.0.3 (Community)&#xff0c;打进入软件界面 step2 创建项目 点击创建项目 step3 选择模板 选着Application&#xff08;Qt&#xff09;->Qt Widgets Application setp4 设置项目 名称中填入项目号名&#xff0c;创建路径中填入项目保存位…

基于C#实现KMP算法

一、BF 算法 如果让你写字符串的模式匹配&#xff0c;你可能会很快的写出朴素的 bf 算法&#xff0c;至少问题是解决了&#xff0c;我想大家很清楚的知道它的时间复杂度为 O&#xff08;MN&#xff09;&#xff0c;原因很简单&#xff0c;主串和模式串失配的时候&#xff0c;我…

django restful framework序列化与反序列化

在前后端分离开发中&#xff0c;对于RESTfulAPI设置&#xff0c;一般需要将查询/更新数据以JSON方式进行返回。 序列化 Model.py from django.db import models class User(models.Model):username models.CharField(verbose_name用户名,max_length10)age models.IntegerF…

服务器数据恢复—raid5上层NTFS分区误删除/格式化的数据恢复案例

NTFS是windows操作系统服务器应用最为广泛的文件系统之一。理论上&#xff0c;NTFS文件系统格式化操作虽然不会对数据造成太大的影响&#xff0c;但是有可能会出现部分文件目录结构丢失的情况。下面介绍一台服务器误操作导致raid5阵列上层的NTFS分区被格式化后如何逆向操作恢复…

Altium Designer学习笔记4

学会添加库。 元器件添加成功。 放置TYPE-C元器件。 绘制网络标识和电源端口&#xff0c;并且添加文字备注。 修改元器件的属性。

Hive安装配置 - 本地模式

文章目录 一、Hive运行模式二、安装配置本地模式Hive&#xff08;一&#xff09;安装配置MySQL1、删除系统自带的MariaDB2、上传MySQL组件到虚拟机3、在主节点上安装MySQL组件4、在主节点上配置MySQL&#xff08;1&#xff09;查看MySQL服务状态&#xff08;2&#xff09;查看M…

Softing mobiLink助力过程自动化——兼容HART、FF、PA的多协议接口工具

由于全球人口增加和气候变化等因素&#xff0c;“水”比以往任何时候都更具有价值。与此同时&#xff0c;环境法规和水处理标准也变得愈加严格。在这一大环境下&#xff0c;自来水公司不得不应对一些新的挑战&#xff0c;例如&#xff0c;更好地提高能源效率、最大程度地减少资…