Android 项目编译 Gradle 配置说明

news2024/12/23 9:52:29

前言

  Android 的Gradle版本更新换代还是很快的,更新换代除了功能上变得强大之外,还会出现很多意料之外的Bug,而很多开发者会被折磨的死去活来,下面我们来看有哪些编译配置。

正文

  首先要知道什么时候会进行编译,有以下几种情况:

  • 创建新项目。
  • 打开老项目。
  • 打开别人的项目。

   这几种情况基本上囊括了大部分实际场景,如果有没有说到的部分,欢迎评论区进行补充,编译的环境主要是Android Studio,用Eclipse或者IDEA进行开发编译的,我没有用过,就没有发言权,抱歉。

一、创建新项目

  通过Android Studio创建新项目,会根据你的Android Studio的版本去创建适合当前版本的项目,这里就会自动给你配置Gradle版本和Gradle插件版本,那么到了这里你可能会问,什么是Gradle版本?什么是Gradle插件版本?它们在哪里?

1. Gradle版本

  在回答之前,假定你已经对Android 的工程项目结构了解了,那么我们首先打开gradle-wrapper.properties,如下图所示:

在这里插入图片描述

  这里我标注的是gradle-7.0-bin.zip,这个7.0就是Gradle版本,Gradle和Gradle插件都是用于编译Android 项目的。

2. Gradle插件版本

  打开工程目录下的build.gradle,如下图所示:

在这里插入图片描述

  你会看到顶部这里有一个plugins,标识插件,然后我标注出来的7.0.0就是Gradle的插件版本。我现在用的Android Studio版本是Android Studio Electric Eel | 2022.1.1,通过此版本创建出来的项目,Gradle版本是7.5,Gradle插件版本是7.4.0

  Gradle和Gradle插件的版本和你的Android Studio是有关系的,首先我们看一下Gradle和Gradle插件之间的对应关系,如下表所示:

3. Gradle插件和Gradle版本对应表

Gradle插件版本所需的最低 Gradle 版本
8.18.0
8.08.0
7.47.5
7.37.4
7.27.3.3
7.17.2
7.07.0
4.2.0+6.7.1
4.1.0+6.5+
4.0.0+6.1.1+
3.6.0 - 3.6.45.6.4+
3.5.0 - 3.5.45.4.1+
3.4.0 - 3.4.35.1.1+
3.3.0 - 3.3.34.10.1+
3.2.0 - 3.2.14.6+
3.1.0+4.4+
3.0.0+4.1+
2.3.0+3.3+
2.1.3 - 2.2.32.14.1 - 3.5
2.0.0 - 2.1.22.10 - 2.13
1.5.02.2.1 - 2.13
1.2.0 - 1.3.12.2.1 - 2.9
1.0.0 - 1.1.32.2.1 - 2.3

  这里面我对应5.4.1、5.6.4和6.7.1这几个版本还是很熟悉的,应该是Android Studio 3.5.2、3.6、4.1版本的对应Gradle。

4. Android Studio版本与Gradle插件对应表

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

Android Studio 版本所需插件版本
Giraffe l 2022.3.13.2-8.1
Flamingo l 2022.2.13.2-8.0
Electric Eel l 2022.1.13.2-7.4
Dolphin l 2021.3.13.2-7.3
Chipmunk l 2021.2.13.2-7.2
Bumblebee l 2021.1.13.2-7.1
Arctic Fox l 2020.3.13.1-7.0

二、打开老项目

  Android Studio中的项目每一次在打开项目的时候就会检查当前的Gradle编译环境,如果你之前的项目是正常编译的,而你很长时间没有再打开过这个项目,那么当你再次打开项目时,就会先检查Gradle环境、SDK环境,如果没有,则会根据当前项目的配置进行下载,下载的时候可能网络会出现一些问题,例如:连接超时Socket方式失败下载失败长时间响应

  遇到这些问题不要慌,首先再多尝试几次,Try Again,你就跟它耗,事不过三,超过三次没有反应,就不要头铁了,我们曲线救国,更换一个网络环境,例如换一个WIFI,或者手机开一个热点,电脑连上,然后再重新编译或者Try Again,还有一种方式是使用阿里云的仓库,这里面就是国内访问的,可能比较快,我也是听说,我没有这么用过,因为我一般更换网络之后就搞定了,脸黑的话就试一下第三个吧,问题总能解决,重点在于自己的心态要平和,不要暴躁。

三、打开别人的项目

  很多时候我们会打开别人的项目,比如开发过程中遇到一个技术点,发现没有头绪,百度上一顿搜索,看到有一个功能差不多的Demo,点进去一看,发现转载,然后又去找原文,原文上一看,哦豁,源码下载还要积分,然后呢?换一个再找,找到一个有贴源码的,在GitHub上,下载之后,用Android Studio打开,这时候就会有三种情况:

  • 项目版本与当前环境一致
  • 项目版本比当前环境低
  • 项目版本比当前环境高

1. 项目版本与当前环境一致

  第一种情况,是有的,但是比较少,从我上面列出来的Gradle、Gradle插件、Android Studio版本,你就知道,这个概率不会太高,碰到了就当你今天中彩票了,那就可以当本地项目来运行了,因为环境一致,别人项目所需要的你本地都有,那只要编译一下,就能够运行了,这不是节省很多时间吗,不过可遇不可求。

2. 项目版本比当前环境低

  第二种情况,就是别人的项目环境,所配置的SDK版本低于你当前环境的版本,这种情况建议你更新项目的Gradle版本和Gradle 插件版本,一般来说你编译这种项目,Android Studio是可以给你提示的,例如我前面截图中的7.0版本Gradle,和7.0.0版本Gradle插件,那么编译就会出现下面这种情况。

在这里插入图片描述

  这里的错误信息就告诉你了,当前最低支持Gradle版本为7.0.2,而你的是7.0,因此让你在Gradle wrapper中更改Gralde版本为 7.0.2。你直接点击一下这行提示:Change Gradle version in Gradle wrapper to 7.0.2 and re-import project,然后就会下载7.0.2版本Gradle,下载好之后就会进行编译,我是编译成功了,如果你编译失败,可以贴一下失败的错误日志。

3. 项目版本比当前环境高

  第三种情况,就是别人的项目环境,所配置的SDK版本高于你当前环境的版本,这种情况,你先尝试一下你的Android Studio能不能编译,如果能编译应该也会下载项目所需要的编译环境,然后再进行编译,如果失败了,或者提示你当前的AS版本较低无法编译的话,你就需要思考一个问题了,就是本地的AS环境能不能更新,因为你可能还有别的项目需要使用当前的环境,为了一个项目更改所有项目的环境,好像有一点不值得,那么就要选择另一个方案,降低别人的项目环境版本,降低到足以在当前Android Studio中正常编译运行就可以了,如果不清楚自己当前的环境版本,可以打开之前的项目,看一下我上面提到的两个文件,去看一下具体的版本信息是多少,然后去更改别人的项目版本,再进行编译,这样来说改动最小。

  如果你在开发中遇到什么编译问题,是本文中没有提到的,欢迎在评论中提出。

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

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

相关文章

Efficient Attention: Attention with Linear Complexities

paper: https://arxiv.org/pdf/1812.01243.pdf 这里写目录标题 一、引言二、方法实现高效注意力的解释效率优势 三、实验消融插入层键的维度骨干架构 一、引言 注意机制在计算机视觉和自然语言处理中有着广泛的应用。最近的工作开发了点积注意力机制,并将其应用于…

MobileBERT模型简单介绍

目录 一、概要 二、深入扩展 2.1 知识蒸馏方法 2.2 渐进式知识迁移 一、概要 MobileBERT 可以看作一个“瘦身”后的BERT-large模型,其使用了瓶颈结构(Bottleneck Structure),并且在自注意力和前馈神经网络的设计上也有一定的改…

图形化之家谱遗传系统

1:废话不多说先看成果。 QQ录屏20230418163603 QQ录屏20230418163732 2:解析: 1:不知道会有多少个孩子,所以我们用二叉树的孩子兄弟结构 typedef struct treeNode {char name[100];//名字int generation;//辈分char g…

Pytorch深度学习笔记(五)反向传播算法

推荐课程:04.反向传播_哔哩哔哩_bilibili 1.为什么要使用反向传播算法 简单模型可以使用解析式更新w 复杂模型,如图,输入矩阵为5*1矩阵,等一层权重矩阵H1为6*5矩阵,则需要30个解析式,第二层权重矩阵H2为6…

1685_Excel的几种脚本处理方式

全部学习汇总: GreyZhang/python_basic: My learning notes about python. (github.com) 做个小结,实际上是写的我自己学习的过程。 关于Excel的处理方式很多,我也不会那么多,在这里我只想写一下我自己接触过的。大致是三种方式&a…

Pikachu靶场(Cross-Site Scripting)

Cross-Site Scripting 反射型xss(get)源代码修改限制地址栏 反射性xss(post)存储型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突&#xff0c…

《花雕学AI》25:用文字画出你的非凡想象力,微软新Bing带你体验DALL-E的神奇

你有没有想过用文字来画画?这听起来可能很不可思议,但是现在,你可以通过微软新Bing来实现这个想法。微软新Bing支持AI绘画功能,只要输入一句话,就能生成一幅图像。这个功能是由DALL-E驱动的,DALL-E是一个能…

mybatis03-多表查询、延迟加载、逆向工程

mybatis03 mybatis 多表联查 背景产生:开发过程中单表查询 不能满足项目需求分析功能。对于复杂业务来说,关联的表有几张,甚至几十张 并且表与表之间的关系相当复杂。目的:实现复杂业务功能,必须进行多表查询&#x…

开发插件JFormDesigner(可视化GUI编程)的使用与注册-简单几步即可完成

开发插件JFormDesigner(可视化GUI编程)的使用与注册 获取链接:1.JFormDesigner获取2.记录插件下载路径3.使用zcj注册4.生成license5.打开idea进行注册 获取链接: https://pan.baidu.com/s/1N9ua2p3BpiMIARCEewRxIw?pwd4e9a 提取…

WebSocket 通信 —— 浏览器原生支持

在上一篇内容中讲到使用Node中的Net核心模块完成socket通信,那么本篇就继续来讲关于浏览器原生支持的 WebSocket ,实现通信。那么什么是 WebSocket ? 它是HTML5开始提供的一种浏览器与服务器间进行全双工(全双工:同时进行双向传输…

激活函数(Activation Function)及十大常见激活函数

目录 1 激活函数的概念和作用 1.1 激活函数的概念 1.2 激活函数的作用 1.3 通俗地理解一下激活函数(图文结合) 1.3.1 无激活函数的神经网络 1.3.2 带激活函数的神经网络 2 神经网络梯度消失与梯度爆炸 2.1 简介梯度消失与梯度爆炸 2.2 梯度不稳…

asp.net+C#房地产销售系统文献综述和开题报告+Lw

本系统使用了B/S模式,使用ASP.NET语言和SQL Server来设计开发的。首先把所有人分为了用户和管理员2个部分,一般的用户可以对系统的前台进行访问,对一般的信息进行查看,而注册用户就可以通过登录来完成对房屋信息的查看和对房屋的…

动态通讯录——C语言【详解+全部码源】

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:进阶C语言,本专栏主要讲解数据存储,进阶指针,动态内存管理&a…

企业数据安全能力建设思路

在现代社会,企业数据安全已经成为一个非常重要的话题。企业数据安全能力的建设是每个企业都必须面对和解决的问题。企业数据安全能力建设思路包括以下几个方面: 1. 建立完善的安全管理制度 企业要建立完善的安全管理制度,包括信息安全政策、…

[入门必看]数据结构5.1:树的基本概念

[入门必看]数据结构5.1:树的基本概念 第五章 树与二叉树5.1 树的基本概念知识总览5.1.15.1.2 树的定义和基本术语5.1.3 树的性质 5.1.15.1.2 树的定义和基本术语树的基本概念树形逻辑结构的应用结点之间的关系描述结点、树的属性描述有序树 V.S 无序树树 V.S 森林 5…

软考 软件设计师上午题uml

UML uml事物依赖关系关联聚合组合关系泛化关系实现关系关联多重度UML类图UML 类图的概念对象图用例图包含关系扩展关系泛化关系用例图概念交互图通信图![在这里插入图片描述](https://img-blog.csdnimg.cn/d62c6f00d57a48949e3306461f3fbe25.png)通信图例子状态图状态图的状态和…

# 生成器

生成器 生成器是什么? 生成器(generator)是一种用来生成数据的对象。它们是普通函数的一种特殊形式,可以用来控制数据的生成过程。 生成器有什么优势? 使用生成器的优势在于它们可以在生成数据的同时控制数据的生成过程…

android ContentObserver实时监测媒体图片增删改,java(1)

android ContentObserver实时监测媒体图片增删改,java&#xff08;1&#xff09; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /> impl…

七、JS07使用 jQuery 操作 DOM

七、使用 jQuery 操作 DOM 7.1 DOM 操作 7.1.1 DOM 操作分类 使用 JavaScript 操作 DOM 时分为三类——DOM Core(核心)、HTML-DOM 和 CSS-DOMjQuery 操作也同样分为这三类下面主要回顾以下 JavaScript 中的 DOM 操作 JavaScript 中的 getElementById()、getElementByTagName…

c++内联函数inline

目录 内联函数的概念&#xff1a; 内联函数的用法&#xff1a; 内联的优点&#xff1a; 内联的缺点&#xff1a; 内联的使用场景 内联注意事项&#xff1a; 内联函数的概念&#xff1a; C中内联&#xff08;inline&#xff09;是一种关键字&#xff0c;用于告诉编译器把函…