Android compileSdkVersion 升级到33

2023-11-09

compileSdkVersion, minSdkVersion 和 targetSdkVersion

1.minSdkVersion:

应用兼容的SDK API最低版本,若手机系统低于minSdkVersion将无法安装;AndroidStudio中写代码时调用的API,若在兼容的版本区间中部分版本不存在,则开发者需要做版本判断来做兼容性处理,否则AndroidStudio会提示错误的,没法正常通过编译。

2.compileSdkVersion

选择用来编译的SDK版本,只影响编译过程,完全不影响实际运行过程。实际运行中,调用哪个版本的API代码取决于手机的系统版本 以及 targetSdkVersion。

3. targetSdkVersion

表明APP最高支持到哪个系统版本的特性,即使App中调用了更高版本系统新特性相关的API,若不更新targetSdkVersion,在更高版本系统的手机上运行时也不会执行这些API。因为App在手机上运行调用API时,Android系统内部有兼容性处理,同一个API, 会根据APP的targetSdkVersion来判断调用哪个版本的API(不同版本的API有可能内部逻辑不同):

  • 若当前系统版本 <= targetSdkVersion,则调用当前系统版本API;
  • 若当前系统版本 > targetSdkVersion,则调用低版本targetSdkVersion的API;(Android系统是向前兼容的,高版本兼容低版本)
  • 若app中调用了只有targetSdkVersion以上版本才有的API, 在高版本系统手机上实际运行时,应该并不会实际调用。

所以,要想使用新的特性和新的API,就需要更新targetSdkVersion。

4.综上

  • 1 应选择compileSdkVersion>=targetSdkVersion,否则编译用的SDK未必包含targetSdkVersion及以下支持的API,有可能会编译不通过。而且一般版本越高的SDK编译和构建工具,一般也优化的越好,所以compileSdkVersion基本上可以选最新的。
  • 2 显然,targetSdkVersion >= minSdkVersion,顺理成章。

5.buildTools 、 Tools 、 Platform-tools

buildTools 、 Tools 、 Platform-tools 这 3 个东西其实都是开发工具,即它的版本更新并不会影响运行的 APP ,只是工具上的升级。
在 build.gradle 中的 buildToolsVersion 版本号是Android构建工具 buildTools 的 API-LEVEL ,这个值 要大于等于 compileSdkVersion,确保不比编译用的SDK版本更旧,因为高版本 buildTools 支持低版本SDK编译出的程序,反过来不一定总是成立 。

因此,这三个工具的版本号,一般都选择最新的。

6.项目实战

  • 报错项
    在这里插入图片描述
  • 代码更改(主要是可空判断)

oderId 改为 oderId?

bundle.getString(KEY_OF_EQUITY_TYPE) 改为 bundle.getString(KEY_OF_EQUITY_TYPE,"")

Log.e(TAG, e.message)改为 Log.e(TAG, e.message.toString())


parcel.readString() 改为 val captcha_key: String?

mClipboardManager.primaryClip = clipContent 改成                     mClipboardManager.setPrimaryClip(clipContent)

 dialog?.ownerActivity = activity改成dialog?.setOwnerActivity(activity)
  • 环境、打包、流水线优化问题
google()
maven { url "http://maven.iklicen.com/nexus/content/repositories/flutter/" }
MobSDK.spEdition=FP
# JAVA_Home - Devops Path
org.gradle.java.home=/opt/jdk-11.0.2

-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-keep class com.mastertipsy.** {*;}
-keep class io.flutter.plugins.sharedpreferences.** { *; }
-keep class vn.hunghd.flutterdownloader.**  { *; }
-keep class com.baseflow.permissionhandler.**  { *; }
-keep class com.mastertipsy.flutter_localization.**  { *; }
-keep class com.lxt.gaia.flutter.** { *;}
-dontwarn io.flutter.**
  • 影响内容
    eg
    刷新到店信息
    弹窗:你确认该车辆已到店维修吗?
    到店未维修
    选择店铺
    图形验证码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android compileSdkVersion 升级到33 的相关文章

随机推荐

  • 1200兆路由器网速_家庭网络配置问题案例:六类网线上网速度只有100兆

    有这样一个案例 家中布置了一根6类网线 8芯中间带个塑料十字的双绞线 网线约10米长 全部为埋地管道暗线 水晶头为568B线序 电脑插也为6类 西门子 568B线序接法 现在出现一个问题 就是网线一个连接移动光猫 为路由器模式 千兆口 然后
  • mac-右键-用VSCode打开

    1 点击访达 搜索自动操作 2 选择快速操作 3 执行shell脚本 替换代码如下 for f in do open a Visual Studio Code f done command s保存会出现一个弹框 保存为 用VSCode打开
  • IDEA2021.2创建java web项目(很详细,手把手创建)

    该文章适合人群 初学java web 不用maven或者gradle创建java web项目 忘记了怎么创建web项目 错误示范 上来直接创建java ee 项目 这样创建出来的项目有Maven或者Gradle包管理 正确演示 1 创建项目
  • “威胁”员工全来上班后,马斯克“尴尬”了:车没地停、工位不够坐、Wi-Fi 还太差

    点击蓝色 程序员黄小斜 关注我哟 加个 星标 每天和你一起多进步一点点 整理 郑丽媛 出品 程序人生 ID coder life 每一个特斯拉员工每周都要在办公室工作 40 个小时 如果你不来 那么我们就认为你辞职了 在马斯克 蛮横 地放出
  • python机器学习——NLTK及分析文本数据(自然语言处理基础)

    NLTK NLTK Natural Language Toolkit 自然语言处理工具包 在NLP 自然语言处理 领域中 最常使用的一个Python库 自带语料库 词性分类库 自带分类 分词功能 NLTK安装 安装 pip install
  • OpenCart 常见错误解决

    1 GC 报错 错误内容 opencart SessionHandler gc ps files cleanup dir opendir var lib php5 failed Permission denied 解决方法 更改 php i
  • 【论文记录】Boosting Detection in Crowd Analysis via Underutilized Output Features

    Boosting Detection in Crowd Analysis via Underutilized Output Features Abstract Crowd Hat使用一种混合的2D 1D压缩技术进行细化空间特征与获取特定人群
  • k8s删除pod镜像没响应marking for deletion pod TaintManagerEviction

    使用命令强制删除 Pod的状态为 Marking for deletion 表示该Pod正在被标记为待删除状态 但实际上并没有被删除 这可能是因为以下原因之一 删除操作被阻塞 可能是由于某些资源或容器正在使用该Pod 导致删除操作被阻塞 您
  • Python报错:module 'scipy' has no attribute 'xxx'

    首先看使用的函数在不在这几个当中 以 interpolate 为例 scipy 将 interpolate 单独定义为一个小子库 所以调用的时候不能单独写 import scipy 而是要写成 import scipy interpolat
  • 路由器打印机服务器系统,路由器怎么设置打印机服务器

    路由器怎么设置打印机服务器 内容精选 换一换 CDC Change Data Capture 即数据变更抓取 通过为源端数据源开启CDC ROMA Connect可实现数据源的实时数据同步以及数据表的物理删除同步 ROMA Connect支
  • DS排序--希尔排序

    目录 题目描述 思路分析 AC代码 题目描述 给出一个数据序列 使用希尔排序算法进行降序排序 间隔gap使用序列长度循环除2直到1 输入 第一行输入t 表示有t个测试示例 第二行输入n 表示第一个示例有n个数据 n gt 1 第三行输入n个
  • PowerBUS 双总线收发器

    随着智能化的发展 人的需求变高 在一个环境内 如果子设备较多 距离适中 大多数是布置485总线加电源地需要4根线 这样就会导致走线复杂 线的成本也较高 如果用BLE或者wifi无线连接时也需要电源地2根线 成本更高 而powerbus双总线
  • Android基础学习总结(十六)——基于ijkplayer封装支持简单界面UI定制的视频播放器

    前言 项目开发中遇到需要解析播放m3u8视频流的情况 但是原生的PlayerView非常慢 使用起来复杂 不适合上手 这里找到一款ijkplayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器 支持播放本地网络视频 也支持
  • [Spring学习]04 Spring IOC创建Bean的几种方式

    目录 一 调用构造器创建Bean对象 二 调用静态工厂方法创建Bean对象 三 调用实例 动态 工厂方法创建Bean对象 一 调用构造器创建Bean对象 通过调用构造器创建Bean对象是我们在实际开发中最常用的方式 而构造器创建Bean对象
  • 运维小知识之企业内部NTP服务器基础安装与配置使用

    0x00 前言简述 基础概念 服务方式 公共 NTP 服务器 0x01 服务器安装配置 CentOS Ubuntu 1 NTP 服务 2 Chrony 服务 0x02 NTP客户端配置 Windows 服务器 Linux 服务器 0x04
  • YOLO系列梳理(三)YOLOv5

    前言 YOLOv5 是在 YOLOv4 出来之后没多久就横空出世了 今天笔者介绍一下 YOLOv5 的相关知识 目前 YOLOv5 发布了新的版本 6 0版本 在这里 YOLOv5 也在5 0基础上集成了更多特性 同时也对模型做了微调 并且
  • 计网第五章(运输层)(七)(TCP的连接建立)

    目录 一 基本概述 二 连接建立 1 基本任务 2 具体实现 三 经典问题之为什么不用 两次握手 一 基本概述 在前面的部分提到过 TCP是基于运输连接来传输TCP报文段 所以TCP的连接和释放是每次面向连接的通信过程中必不可少的过程 TC
  • 7-16 插松枝

    人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上 做成大大小小的松枝 他们的工作流程 并不 是这样的 每人手边有一只小盒子 初始状态为空 每人面前有用不完的松枝干和一个推送器 每次推送一片随机型号的松针片 工人首先捡起一根空的松枝干
  • Flutter中深入了解MaterialApp,常用属性解析

    一 Flutter中结构图 Flutter Framework Foundation Animation Painting Gestures合成了Dart UI层 对应的是Flutter中 dart ui 包 对应的含义是动画 手势 绘制能
  • Android compileSdkVersion 升级到33

    compileSdkVersion minSdkVersion 和 targetSdkVersion 1 minSdkVersion 应用兼容的SDK API最低版本 若手机系统低于minSdkVersion将无法安装 AndroidStu