AndroidAGP8.1.0和JDK 17迁移之旅

AndroidAGP8.1.0和JDK 17迁移之旅

在这里插入图片描述

前言:

由于我最近写demo的直接把之前的项目从AGP4.2.2升级到8.1.0引发了一些列问题,这里记录一下,前面讲解过迁移DSL方式遇到的问题,这次升级8.1.0也比之前顺利多了,想看DSL迁移的可以参考我之前的文章:

https://blog.csdn.net/u012556114/article/details/130547815

https://juejin.cn/post/7230416597012283453

1.简介:

随着 Android Studio Flamingo 正式版的发布,AGP 8(Android Gradle Plugin 8)也正式进入咱们的视野,这次 AGP 8 相关更新归于「断代式」更新,同时假如想体验 AGP 8,就需求晋级到 Android Studio Flamingo 版别,而晋级到 Flamingo 的话,默许自带的 Java 版别就会变成 JDK 17 所以,这便是你需求适配 AGP8 的首要原因之一。

在这里插入图片描述

2.Flamingo 兼容

首先,如下图所示,运用 Flamingo 不一定就要用 AGP 8,它的支撑范围是 3.2- 8.0 ,可是,由于 Flamingo 默许自带的 Java 版别是 JDK 17 ,所以默许情况下你最低需求 AGP 7

Android Gradle 插件和 Android Studio 兼容性

Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件 (AGP) 添加了几项专用于构建 Android 应用的功能。下表列出了各个 Android Studio 版本所需的 AGP 版本。

如果您的项目不受某个特定版本的 Android Studio 支持,您仍然可以使用旧版 Android Studio 打开和更新项目。

Android Studio 版本所需的 AGP 版本
Hedgehog | 2023.1.13.2-8.2
Giraffe | 2022.3.13.2-8.1
Flamingo | 2022.2.13.2-8.0
Electric Eel | 2022.1.13.2-7.4
Dolphin | 2021.3.13.2-7.3

支持的 Android API 级别上限

每个版本的 Android Studio 和 AGP 都有支持的 API 级别上限。如果项目所用 Android Studio 或 AGP 的 targetSdkcompileSdk 高于支持的最大值,则可能会导致意外问题。我们建议您使用最新的预览版 Android Studio 和 AGP 来处理以预览版 Android OS 为目标平台的项目。您可以安装 Android Studio 的预览版以及稳定版。

API 级别上限如下:

Android Studio 版本AGP 版本支持的 API 级别上限
Hedgehog | 2023.1.18.234
Giraffe | 2022.3.18.133
Flamingo | 2022.2.18.033

3.升级Gradle插件版本到8.1.0:

[versions]
agp = "8.1.0"
org-jetbrains-kotlin-android = "1.8.0"
core-ktx = "1.10.1"
junit = "4.13.2"
androidx-test-ext-junit = "1.1.5"
espresso-core = "3.5.1"
appcompat = "1.6.1"
material = "1.9.0"
constraintlayout = "2.1.4"
glide = "4.13.0"
glide-compiler = "4.13.0"
kotlin-stdlib = "1.8.21"
kotlin-reflect = "1.8.10"
kotlin-coroutines-core = "1.7.0"
kotlin-coroutines-android = "1.7.0"
lifecycle_version = "2.2.0"
junit_version = "4.13.2"
utilcodex = "1.31.1"
mmkv = "1.3.1"
gson = "2.9.0"
xutils = "3.5.1"
subsampling-scale-image-view = "3.10.0"

在这里插入图片描述

4.修改App.gradle依赖:

@Suppress("DSL_SCOPE_VIOLATION")
plugins {alias(libs.plugins.com.android.application)alias(libs.plugins.org.jetbrains.kotlin.android)
}

在这里插入图片描述

5.新建一个后缀名为.toml的文件:

在这里插入图片描述

6.修改BuildConfig配置:

这里配置BuildConfig有2种方式:

6.1 没有配置BuildConfig时:

运行的时候直接报错了,提示找不到BuildConfig。

在这里插入图片描述

6.2 在module里面添加配置:

buildFeatures{buildConfig = true
}

配置好BuildConfig后再次运行,直接构建成功,运行起来了~~

在这里插入图片描述

6.3 添加全局的buildConfig配置:

在gradle.properties添加如下配置:

android.defaults.buildfeatures.buildconfig=true

7.添加第三方的依赖库:

utilcodex = "1.31.1"
mmkv = "1.3.1"
gson = "2.9.0"
xutils = "3.5.1"
subsampling-scale-image-view = "3.10.0"

配置第三方依赖库:

dependencies {implementation (libs.appcompat)implementation (libs.material)implementation (libs.glide)annotationProcessor(libs.glide.compiler)implementation (libs.subsampling.scale.image.view)implementation (libs.utilcodex)implementation (libs.gson)implementation (libs.mmkv)implementation (libs.xutils)
}

在这里插入图片描述

8.实现效果如下:

在这里插入图片描述
在这里插入图片描述

9. 完整的依赖库配置如下:

[versions]
agp = “8.1.0”
org-jetbrains-kotlin-android = “1.8.0”
core-ktx = “1.10.1”
junit = “4.13.2”
androidx-test-ext-junit = “1.1.5”
espresso-core = “3.5.1”
appcompat = “1.6.1”
material = “1.9.0”
constraintlayout = “2.1.4”
glide = “4.13.0”
glide-compiler = “4.13.0”
kotlin-stdlib = “1.8.21”
kotlin-reflect = “1.8.10”
kotlin-coroutines-core = “1.7.0”
kotlin-coroutines-android = “1.7.0”
lifecycle_version = “2.2.0”
junit_version = “4.13.2”
utilcodex = “1.31.1”
mmkv = “1.3.1”
gson = “2.9.0”
xutils = “3.5.1”
subsampling-scale-image-view = “3.10.0”

[libraries]
core-ktx = { group = “androidx.core”, name = “core-ktx”, version.ref = “core-ktx” }
junit = { group = “junit”, name = “junit”, version.ref = “junit” }
androidx-test-ext-junit = { group = “androidx.test.ext”, name = “junit”, version.ref = “androidx-test-ext-junit” }
espresso-core = { group = “androidx.test.espresso”, name = “espresso-core”, version.ref = “espresso-core” }
appcompat = { group = “androidx.appcompat”, name = “appcompat”, version = “1.6.1” }
material = { group = “com.google.android.material”, name = “material”, version.ref = “material” }
constraintlayout = { group = “androidx.constraintlayout”, name = “constraintlayout”, version.ref = “constraintlayout” }
glide = {group = “com.github.bumptech.glide”,name = “glide”,version.ref = “glide”}
glide-compiler = {group = “com.github.bumptech.glide”,name = “compiler”,version.ref = “glide-compiler”}
kotlin-stdlib = {group = “org.jetbrains.kotlin”,name = “kotlin-stdlib-jdk7”,version.ref = “kotlin-stdlib”}
kotlin-reflect = {group = “org.jetbrains.kotlin”,name = “kotlin-reflect”,version.ref = “kotlin-reflect”}
kotlin-coroutines-core = {group = “org.jetbrains.kotlin”,name = “kotlinx-coroutines-core”,version.ref = “kotlin-coroutines-core”}
kotlin-kotlinx-coroutines-android = {group = “org.jetbrains.kotlin”,name = “kotlinx-coroutines-androidt”,version.ref = “kotlin-coroutines-android”}
utilcodex = {group = “com.blankj”,name = “utilcodex”,version.ref = “utilcodex”}
mmkv = {group = “com.tencent”,name = “mmkv”,version.ref = “mmkv”}
xutils = {group = “org.xutils”,name = “xutils”,version.ref = “xutils”}
gson = {group = “com.google.code.gson”,name = “gson”,version.ref = “gson”}
subsampling-scale-image-view = {group = “com.davemorrissey.labs”,name = “subsampling-scale-image-view-androidx”,version.ref = “subsampling-scale-image-view”}

[plugins]
com-android-application = { id = “com.android.application”, version.ref = “agp” }
org-jetbrains-kotlin-android = { id = “org.jetbrains.kotlin.android”, version.ref = “org-jetbrains-kotlin-android” }

[bundles]

10.总结:

今天升级到8.1.0也遇到不少问题,由于之前升级到DSL很多语法都很熟悉,所以遇到问题查找资料后很快就解决了,总结如下:

  • 升级jdk版本到JDK17和AGP版本到8.1.0
  • 新建一个.toml后缀的文件,添加统一依赖库配置
  • 修改buildConfig打包配置
  • 修改项目的build.gradle配置
  • 修改App目录下的build.gradle配置
  • 修改settings.gradle配置

11.项目demo的源码地址如下:

(在dev_version_catelog分支)

https://gitee.com/jackning_admin/androi-long-image-view

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交互消息式IMessage扩展开发记录

IMessage扩展简介 iOS10新加入的基于iMessage的应用扩展,可以丰富发送消息的内容。(分享表情、图片、文字、视频、动态消息;一起完成任务或游戏。) 简单的将发送的数据内型分为三种: 1.贴纸Stickers; 2.交…

动态内存管理详解

动态内存管理 1.前言 目前来回顾一下想要在内存中开辟空间有哪些方法? 创建变量: int a 0;//在栈上开辟了4字节的空间创建数组: int arr[10] { 0 };//在栈上开辟40字节的空间 但是这两种开辟方式都有两个特点: 开辟的内存空间…

安装搭建私有仓库 Harbor

目录 一. 准备环境 1.1安装 Docker 1.2安装 Docker Compose 二. 下载 Harbor 安装包 三. 解压安装包 四. 配置 Harbor 五. 安装 Harbor 六. 访问 Harbor 七. 创建项目、用户和角色 一. 准备环境 确保您的服务器满足 Harbor 的系统要求。最低要求是至少 2 核 CPU、4GB…

Azure应用程序网关

文章目录 什么是应用程序网关实战演练创建虚拟网络创建虚拟机创建应用程序网关测试搭建结果 什么是应用程序网关 Azure应用程序网关是一种托管服务,用于提供安全、可缩放的 Web 应用程序前端点的应用程序传送控制和保护。它可以通过 SSL 终止、cookie 基于会话持久…

【计算机网络八股】计算机网络(一)

目录 计算机网络的各层协议及作用?TCP和UDP的区别?UDP 和 TCP 对应的应用场景是什么?详细介绍一下 TCP 的三次握手机制?为什么需要三次握手,而不是两次?为什么要三次握手,而不是四次&#xff1f…

[C语言]分支语句和循环语句

[C语言]分支语句和循环语句 文章目录 [C语言]分支语句和循环语句C语言语句分类分支语句if语法结构else的匹配规则switch语句switch语句中的breakswitch语句中default 循环语句while循环while循环中的break和continuefor循环for循环中的break和continuefor循环的变种do while循环…

广告牌安全传感器,实时监测事故隐患尽在掌握

在现代城市中,广告牌作为商业宣传的重要媒介,已然成为城市中一道独特的风景线。然而,随着城市迅速发展,广告牌的安全问题也引起了大众关注。广告招牌一般悬挂于建筑物高处,量大面大。由于设计、材料、施工方法的缺陷&a…

函数栈帧的创建与销毁

目录 引言 基础知识 内存模型 ​ 寄存器的种类与功能 常用的汇编指令 函数栈帧创建与销毁 main()函数栈帧的创建 NO1. NO2. NO3. NO4. NO5. NO6. main()函数栈帧变量的创建 调用Add()函数栈帧的预备工作——传参 NO1. NO2. NO3. Add()函数栈帧的创建 …

C语言入门_Day 6布尔数与比较运算

目录 前言 1.布尔数 2.比较运算 3.易错点 4.思维导图 前言 除了算术计算以外,编程语言中还会大量使用比较运算,并会根据比较运算的结果是“真”还是“假”,来执行不同的代码。 当你想买一杯奶茶,准备支付的时候,支…

Codeforces EDU 151 Div.2

文章目录 A. Forbidden IntegerB. Come TogetherC. Strong PasswordD. Rating SystemE. Boxes and Balls A. Forbidden Integer Problem - A - Codeforces 给定整数n,从1~k中选择除了x的数,使这些数之和为n,每个数可以选择无限次 爆搜&…

[Vue]解决npm run dev报错node:internal/modules/cjs/loader:1031 throw err;

解决: 有2中方法,建议先尝试第一种,不行再第二种 第一种: 重新安装依赖环境 删除项目的node_modules文件夹,重新执行 # 安装依赖环境 npm install# 运行 npm run dev 我只用了第一种方法就可以了 ,第二种方法从别的博主那看到…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)二(113)

需求&#xff1a; 有一个List<Map<String.Object>>,存储了区域的数据&#xff0c; 数据是根据用户查询条件进行显示的&#xff1b;所以查询的数据是动态的&#xff1b;按区域维度统计每个区域出现的次数&#xff0c;并且按照次数的大小排序&#xff08;升序&#…

最新ChatGPT网站AI系统源码+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库/

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

从 Ansible Galaxy 使用角色

从 Ansible Galaxy 使用角色 根据下列要求&#xff0c;创建一个名为 /home/curtis/ansible/roles.yml 的 playbook &#xff1a; playbook 中包含一个 play&#xff0c; 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。 此角色配置一项服务&#xff0c;以…

Docker容器:docker镜像的创建及dockerfile

Docker容器&#xff1a;docker镜像的创建及dockerfile案例 一.docker镜像的三种创建方法 创建镜像有三种方法&#xff1a;基于现有镜像创建、基于本地模板创建及基于dockerfile创建 1.基于现有镜像创建 1.1 启动镜像 #首先启动一个镜像&#xff0c;在容器里做修改 docker …

SpringBoot常用注解-@PathVariable、@RequestParam 、@RequestBody

目录 PathVariable RequestParam RequestBody PathVariable PathVariable 获取url中的数据&#xff0c;绑定路径中的占位符参数到方法参数变量中&#xff0c;get或者post方式都可以&#xff0c;如果URL中无参数&#xff0c;将会出错 例如获取/login/id/name中的id值和name值 …

途乐证券|定增募资是什么意思?

作为融资手法之一&#xff0c;定增募资在企业中被广泛运用。但一般投资者对此或许不太了解&#xff0c;只知道它是一种融资手法。那么&#xff0c;定增募资到底是什么意思呢&#xff1f; 一、什么是定增募资&#xff1f; 定增募资即定向增发股票募集资金&#xff0c;是新股票发…

C++入门知识点——解决C语言不足

&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️ &#x1f4a5;个人主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王&#x1f525;&#x1f525;&#x1f525; &#x1f4a5;代码仓库&#xff1a;&#x1f525;&#x1f525;魔…

【C# 基础精讲】LINQ to Objects查询

LINQ to Objects是LINQ技术在C#中的一种应用&#xff0c;它专门用于对内存中的对象集合进行查询和操作。通过使用LINQ to Objects&#xff0c;您可以使用统一的语法来查询、过滤、排序、分组等操作各种.NET对象。本文将详细介绍LINQ to Objects的基本概念、常见的操作和示例&am…

Android Studio实现读取本地相册文件并展示

目录 原文链接效果 代码activity_main.xmlMainActivity 原文链接 效果 代码 activity_main.xml 需要有一个按钮和image来展示图片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk…