安卓14无法安装应用解决历程
客户手机基本情况:
安卓14,对应的 targetSdkVersion 34
前天遇到了安卓14适配问题,客户发来的截图是这样的


描述:无法安装我们公司的B应用。
型号:三星+google美版
解决步骤:
1、寻找其他安卓14手机测试。
同事安卓14的手机,可以安装上,只是有提示

所以,初步判定是谷歌系统问题。
2、target修改位34,请客户安装。
依然安装不上,同事的手机依然有可以安装,有提示。
查询到另外一种安装方式,但是,对于客户,肯定不合适,
adb install --bypass-low-target-sdk-block xxx.apk
3、手机设置方向尝试解决。
(1)清除数据和缓存
(2)兼容的设置

都不行
(3)接下来继续做程序方向的改造
4、尝试compile修改和一个相关库项目
我查询compile 的版本和target的关系,意思是最好一致,于是我修改为一致的,项目的库项目有2个,我修改了1个功能相关的库项目的target和compile版本
再次尝试,用户依然无法安装。
5、请教
给了我2个提示,
A、一个是32位和64的问题,我得去分析。
B、安卓14,虽然有得可以安装,但是,调试是不行的,所以,找真机测试,可以看到更详细的报错信息
6、去掉32位的限制,安卓14真机调试。
用户可以安装了。他的三星手机无法使用32位的应用,所以,无法安装;我同事的手机是可以支持的。
7、可以安装,但是【输完验证码 闪退】-okhttp版本需要适配安卓14,
于是继续真机调试
是okhttp3的版本需要适配target34,由3.11.0修改为4.8.1
// implementation 'com.squareup.okhttp3:okhttp:3.11.0'implementation 'com.squareup.okhttp3:okhttp:4.8.1'
8、同事手机可以运行,客户手机依然奔溃。-尝试卸载旧的再安装,也不行。
怀疑缓存问题,让客户卸载后,再次安装也不行。
9、另外一个库项目里,引入有一个小的报错,com.android.support 需要变成androidX
com.android.support 报错,按理来说需要修改为androidX
android stadio 自带的攻击可以支持,但是,要求tools版本有要求


这个版本,在项目根目录的的build.gradle里可以查看
很明显,我的不符合要求

10、升级com.android.tools.build:gradle 为3.20,对应gradle-wrapper.也需要升级
但是,提醒,gradle-wrapper.properties 需要变为4.6,
于是这个配置也升级,但是自动变为
gradle-4.6-bin
无法更新下来
手动下载也打不开网络
于是,我又手动修改为gradle-4.6-all,发现可以手动下载
于是,工程里修改升级
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
更新后,提示kotlin_version 版本太低,继续修改
ext.kotlin_version = '1.1.51'
修改为1.2.51
11、升级完成,但是,无法启动运行
做了以下尝试
1、libpulltorefresh工程的target我也改为34,上午没有改动;
2、libpulltorefresh 工程的 com.android.support:appcompat 引入,由compile修改为implementation
12、还是无法启动,于是计划回退到步骤8。
把tools的版本退重新回退到3.0.1,一直构建不了。(20分钟以上)
13、备份程序也无法启动。(5分钟)
因为客户来了,只能告知客户一时解决不了,让他先附近转转,而为有点焦虑。
14、强制退出android stadio
15、再次启动android stadio,打开项目。
我去上了一下厕所,再次回来,项目竟然初始化好了。可以运行了
这里说明,心态要好,耐心等待
结果:
客户的手机,竟然可以安装了。
总结:
主要是步骤8的那个版本起作用。
步骤11无法判断是否起了作用
9,10步骤最终回退了。
后续需要完善的内容:
1、欢迎页面把模拟器部分注释掉了;正式上线需要放开。
2、Minifest里面,启动类加了export=true;上线前应该修改为false;否则安全过不去;
3、存储读取变更,设备报修读取相册申请权限部分修改;改为原生代码;
4、工单附件下载在安卓14不适配,需要修改
相关文章:
安卓14无法安装应用解决历程
客户手机基本情况: 安卓14,对应的 targetSdkVersion 34 前天遇到了安卓14适配问题,客户发来的截图是这样的 描述:无法安装我们公司的B应用。 型号:三星google美版 解决步骤: 1、寻找其他安卓14手机测试…...
【Linux】传输层协议UDP
目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务…...
玩机搞机基本常识-------列举安卓机型一些不常用的adb联机命令
前面分享过很多 常用的adb命令,今天分享一些不经常使用的adb指令。以作备用 1---查看当前手机所有app包名 adb shell pm list package 2--查看当前机型所有apk包安装位置 adb shell pm list package -f 3--- 清除指定应用程序数据【例如清除浏览器应用的数据】 …...
unity学习14:unity里的C#脚本的几个基本生命周期方法, 脚本次序order等
目录 1 初始的C# 脚本 1.1 初始的C# 脚本 1.2 创建时2个默认的方法 2 常用的几个生命周期方法 2.1 脚本的生命周期 2.1.1 其中FixedUpdate 方法 的时间间隔,是在这设置的 2.2 c#的基本语法别搞混 2.2.1 基本的语法 2.2.2 内置的方法名,要求更严…...
pytorch 比较两个张量的是否相等的函数介绍
在 PyTorch 中,可以使用多种函数来比较两个张量是否相等,具体选择取决于对比较精度的需求以及可能的数值误差。以下是常用的比较方法: 1. 完全相等的比较 (1) torch.eq 逐元素比较两个张量是否相等,返回布尔张量。 import torc…...
MySQL Windows 11 的 MySQL 配置文件 (my.ini) 路径查找指南
✅ Windows 11 的 MySQL 配置文件 (my.ini) 路径查找指南 在 Windows 11 上,MySQL 的 ini 配置文件(通常是 my.ini 或 my.cnf)的位置取决于 MySQL 的安装方式。下面是一些常见的路径和方法来找到这个配置文件。 🔍 方法 1&#…...
06-RabbitMQ基础
目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装 2.2.收发消息 2.2.1.交换机 2.2.2.队列 2.2.3.绑定关系 2.2.4.发送消息 2.3.数据隔离 2.3.1.用户管理 2.3.2.virtual host 3.SpringAMQP 3.1.导入Demo工程 3.2.快速入门 3.2.1.消…...
关于markdown实现页面跳转(调查测试:csdn(博客编写效果、发布效果)、typroa中md转pdf的使用情况)
一-方法介绍 [点击跳转到标题0](#1) <a href"#2">正文2</a>### <span id"2">标题0</span>二、跳转测试区 点击跳转到标题0 正文2 三、测试结果 场景MDspan-可标题写博客时候,右侧显示区效果可以发布博客的效果可以…...
el-dialog 组件 在<style lang=“scss“ scoped>标签
vue3 中使用element-plus的el-dialog 组件 <style> .el-dialog.plan-text-pdf .el-dialog__body {height: 1485px; // 需要在 style 标签写。 建议新增个类名 .plan-text-pdf 防止重复样式 } </style><style lang"scss" scoped> :deep() .el-dial…...
《深度学习梯度消失问题:原因与解决之道》
在深度学习的训练过程中,梯度消失是一个常见且棘手的问题,它会严重影响模型的训练效果和性能。以下是对该问题的原因分析与解决办法。 梯度消失问题的原因 首先是激活函数选择不当。像Sigmoid和Tanh这类传统激活函数,在输入值较大或较小时&…...
中高级运维工程师运维面试题(十一)之 Docker
目录 往期回顾前言基础知识1. 什么是 Docker?2. Docker 的核心组件有哪些?3. Docker 镜像和容器有什么区别?4. 什么是 Dockerfile? 高级知识5. 什么是多阶段构建?如何使用?6. Docker 网络有哪些模式&#x…...
Gitee图形界面上传(详细步骤)
目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe,顺序不能搞错2. …...
WebSocket 实现指南
WebSocket 实现指南 目录 1. 依赖安装 1.1 安装必要的包 # 安装 gorilla/websocket go get github.com/gorilla/websocket# 安装 gin 框架 go get github.com/gin-gonic/gin1.2 更新 go.mod require (github.com/gin-gonic/gin v1.9.1github.com/gorilla/websocket v1.5.3…...
TRELLIS - 生成 3D 作品的开源模型
TRELLIS 是一个大型 3D 资产生成模型。它接收文本或图像提示,并生成各种格式的高质量 3D 资产,例如 Radiance Fields、3D Gaussians 和网格。TRELLIS 的基石是统一的结构化 LATent (SLAT) 表示,它允许解码为不同的输出…...
uni-app图文列表到详情页面切换
需求:参考若依框架后,想实现首页浏览文章列表,没有合适的样式参考,所以需要有效果做到“图文列表到详情页面切换”,查阅了一下案例 发现有相应的案例,在导航栏“模板”中找到了 DCloud 插件市场 PC电脑端访…...
ros2-3.4话题通信最佳实践
3.4.1 工程架构设计 需求背景: 第一,通过这个小工具可以看到系统的实时状态信息包括记录信息的时间、主机名称、CPU使用率、内存使用率、内存总大小、剩余内存、网络接收数据量和网络发送数据量; 第二,要有一个简单的界面,可以将…...
Vmware安装centos
用来记录自己安装的过程 一、创建虚拟机安装centos镜像 点击完成后,等待一会会进入centos的系统初始化界面 二、centos初始化配置 三、配置网络 1、虚拟网络编辑器,开启VMnet1、VMnet8的DHCP vmware左上角工具栏,点击【编辑】->【虚拟网…...
51单片机——按键实验
由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间的长短由按键的机械特性决定的,一般为 5ms 到 10ms,为了确保 CPU 对按键的…...
QT c++ 自定义按钮类 加载图片 美化按钮
如果你有需要利用图片美化按钮的情况,本文能帮助你。 鼠标左键按下按钮和松开,按钮显示不同的图片。 1.按钮类 //因为此类比较简单,1个头文件搞定,没有cpp文件 #ifndef CUSTOMBUTTON_H #define CUSTOMBUTTON_H #include <Q…...
Django:构建高效Web应用的强大框架
在当今快速发展的Web开发领域,选择一个合适的框架对于项目的成功至关重要。Django,作为Python编程语言中最受欢迎的Web框架之一,凭借其强大的功能、高度的可扩展性和简洁的语法,成为了众多开发者心中的首选。本文将深入探讨Django…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

