安卓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不适配,需要修改

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

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

相关文章

【WRF数据准备】ECMWF 49r1: Soil Variables的变化及WRF模型修正

目录 ECMWF 49r1: Change in soil variablesECMWF 49r1更新的背景土壤变量的主要变化对WRF使用者的影响Github中描述ERA5 Vtable 下载另:原始 IFS 数据-ECMWF 服务器参考2024年12月12日,ECMWF 发布了 49r1 版本的业务 IFS。ECMWF在其49r1循环版本中对土壤变量进行了重要更新。…

一机多实例:如何在一台机器上高效运行多个 MySQL 服务

前言 在实际开发和测试环境中,我们经常需要运行多个 MySQL 实例来模拟不同的数据库环境。例如,在一台服务器上运行多个数据库服务以节约硬件资源,或者同时运行不同版本的 MySQL 进行功能兼容性测试。MySQL 本身支持通过配置多实例运行&#…

源代码编译安装X11及相关库、vim,配置vim(1)

一、目录结构 如下。 所有X11及相关库装到mybuild,源代码下载到src下,解压,进入,编译安装。编译时指定--prefix到相同的目录,即上图中mybuild。 ./configure --prefixpwd/../../mybuild [CFLAGS"-I/path/to/X11…

5. CSS引入方式

5.1 CSS的三种样式 按照 CSS 样式书写的位置(或者引入的方式),CSS样式表可以分为三大类: 1.行内样式表(行内式) 2.内部样式表(嵌入式) 3. 外部样式表(链接式) 5.2 内部样式表 …

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数! 默认成员函数是程序猿不显示声明定义,编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的,关于类与对象不才在前面笔记中有详细的介绍:点我…

WPF区域导航+导航参数使用+路由守卫+导航日志

背景:使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的,不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel: private object body;public object Body {get { retu…

Unity中 Xlua使用整理(一)

1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包,并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…

Matlab仿真径向受压圆盘光弹图像

Matlab仿真径向受压圆盘光弹图像-十步相移法 主要参数 % 定义圆盘参数 R 15; % 圆盘半径,单位:mm h 5; % 圆盘厚度,单位:mm P 300; % 径向受压载荷大小,单位&#xff…

基于Django的学校智能图书馆借书归还订阅管理系统

完整源码项目包获取→点击文章末尾名片!

【设计模式-2】23 种设计模式的分类和功能

在软件工程领域,设计模式是解决常见设计问题的经典方案。1994 年,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(四人帮,GoF)在《设计模式:可复用面向对象软件的基础》一书中系统性地总结了…

阿里云代理商热销产品推荐

在数字化浪潮的推动下,企业对于云计算的依赖日益加深。阿里云,作为中国领先的云计算服务提供商,为企业提供了丰富多样的云产品和服务。本文将聚焦于阿里云代理商热销产品推荐,探讨其如何帮助企业高效利用云资源,加速数…

[redux] 异步逻辑的两种写法

createAsyncThunk | Redux Toolkit 第一种, extraReducers 普通的reducers只能写同步代码 异步必须得用中间件的形式,就是异步代码调用完有结果了, 再调用同步的reducer, 大概这么理解, 第一种怎么用呢? 先用一个异步函数 const fetchUserById createAsyncThunk(users/fet…

在Java中使用有符号类型模拟无符号整数的技巧

有符号整数和无符号整数 有符号整数:可以表示正数、负数和零。例如,Java中的 byte 类型是有符号的,其范围是 -128 到 127.无符号整数:只能表示非负数(即零和正数)。例如,无符号 byte 应该表示的…

51单片机——8*8LED点阵

LED 点阵的行则为发光二极管的阳极,LED 点阵的列则为发光二极管的阴极 根据 LED 发光二极管导通原理,当阳极为高电平,阴极为低电平则点亮,否则熄灭。 因此通过单片机P0口可控制点阵列,74HC595可控制点阵行 11 脚 SR…

Flutter:邀请海报,Widget转图片,保存相册

记录下,把页面红色区域内的内容,转成图片后保存到相册的功能 依赖 # 生成二维码 qr_flutter: ^4.1.0 # 保存图片 image_gallery_saver_plus: ^3.0.5view import package:demo/common/index.dart; import package:ducafe_ui_core/ducafe_ui_core.dart; i…

C++Primer const限定符

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

C语言 游动的小球

代码如下&#xff1a; 在这里插入代码片#include<stdio.h> #include<stdlib.h> #include<windows.h>int main() {int i,j;int x 5;int y 10;int height 20;int velocity_x 1;int velocity_y 1;int left 0;int right 20;int top 0;int bottom 10;while(1){…

动漫推荐系统django+vue前台后台完整源码

完整源码项目包获取→点击文章末尾名片&#xff01;

Chapter 1 Understanding Large Language Models

文章目录 Understanding Large Language ModelsWhat is an LLM?Applications of LLMSStages of building and using LLMsUsing LLMS for different tasksA closer look at the GPT architectureBuilding a large language modelSummary Understanding Large Language Models …

什么是VLAN?

VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09;是一种将物理局域网划分成多个逻辑上独立的虚拟网络的技术。VLAN不依赖于设备的物理位置&#xff0c;而是通过逻辑划分&#xff0c;将局域网内的设备虚拟地组织到同一组。这种技术允许网络管理员…