安卓学习记录1——持续更新ing
该篇文章主要用于记录个人在使用AS打包安卓apk阶段遇到的各种问题、疑惑以及解决方式,因为问题比较杂没有什么系统性,所以暂时就按照流水线的方式进行记录吧,方便自己后续回溯问题。
博主之前已经处理过了部分安卓配置,包括JDK、SDK、NDK,所以下面的文章中很少关于此部分的内容,主要是对于AS工程项目配置的梳理。
一、Gradle配置:
Gradle是什么?它是一个开源的构建自动化工具,专为管理浮渣的软件项目而生的。在安卓开发中,它扮演者项目构建者的角色,其核心作用包含但不仅限于:
- 自动化构建流程:将源码(Java/Kotlin)、资源文件、库依赖等编译、打包成可运行的apk、aab文件。
- 依赖管理:自动从远程仓库(如Maven Central)下载第三方库,例如Retrofit、Glide
- 任务编排:执行自定义任务,流入代码检测、测试、代码混淆、发布
- 多项目支持:管理包括多个模块(Module)的大型项目,例如App模块、Library模块
- 插件扩展:通过插件(例如Android Gradle Plugin,即AGP)提供安卓专属能力,例如打包、签名等。
在任意一个安卓项目中,都有一个配置文件gradle-wrapper.properties文件用于进行Gradle的配置:
该配置文件确定了整个安卓工程的Gralde配置,下面从我对该配置的认识来进行详细的分析,以及自己如何进行自定义配置:
1、Gradle用户根目录:
该目录定义了Gralde的根目录,通过一个环境变量GRADLE_USER_HOME来定义路径,在windows系统下,它的默认值是:C:\Users\<用户名>\.gradle,如下所示:
自定义根目录位置:
默认存储位置在C盘,但是这个目录文件是比较大的,一般好几个G,但是C盘空间有限,我不太想放在这里,所以想着改放D盘。对于自定义根目录位置有两种方式:方式一,更改环境变量GRADLE_USER_HOME的指向进行全局配置(推荐);方式二,修改AS的全局配置。
方法二:
使用方式一会对所有的项目生效,配置之后需要重启AS;方式二仅对于当前的AS工程生效,如果新建AS项目依然会使用默认的路径。博主开始使用的是第二种方式,发现新建的项目依然在C盘生成了.gradle目录,而且重复下载了大量内容。所以为了节省C盘空间并且避免资源的重复下载,建议使用方式一进行全局的配置。
2、Gradle的下载路径:
# 指定下载的Gralde的版本 distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
这个路径的配置默认从官网的去下载对应的发行版本,Gradle发行包的下载可以通过在线和离线的方式进行。如果在线下载,从官网的下载的速度比较慢,可以适用国内的阿里云、腾讯云等镜像进行加速下载;如果采用离线的方式,需要先去官网下载下来放在本地,然后描述方式改为使用本地离线包。
# 指定下载的Gralde的版本(官网)
#distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
# 使用阿里云镜像下载
#distributionUrl=https\://mirrors.aliyun.com/gradle/gradle-8.11.1-bin.zip
# 使用腾讯云镜像下载
#distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.11.1-bin.zip
# 使用本地离线地址
# 使用相对路径(推荐)
# distributionUrl=gradle/wrapper/gradle-8.11.1-bin.zip
# 或绝对路径
distributionUrl=file\:///D:/SoftInstall/Android/Gradle/offlineVersion/gradle-8.11.1-bin.zip
二、Gradle用户根目录结构:
接下来博主将解析一下Gradle根目录的目录结构,充分认识了解各个目录的功能作用
三、加速下载、配置镜像:
为了解决从官网下载插件、依赖缓慢的问题,可以配置国内的阿里云、腾讯云镜像地址。
1、项目级配置:
如果想要只对当前的项目生效,可以在当前项目的根目录下build.gradle(项目级,非模块级)文件中进行配置:
配置之后进行构建,发现报错内容如下:
原因是因为在AS的Gradle配置中,优先使用了settings.gradle中定义的仓库,但是项目却在build.gradle中重复添加了仓库。冲突的根源在于当前的安卓版本比较新,在Gradle7.0+引入了dependencyResolutionManagement,强制要求仓库在settings.gradle中进行集中管理,如果在build.gradle中重复添加仓库,会触发此错误。(低版本应该没有这个问题)
解决方式:统一仓库到settings.gradle中,删除在build.gradle中的仓库配置。
或者如果一定想要在项目的build.gradle中进行配置,可以修改setting.gradle中配置,以此来降低仓库的检查强度。
// settings.gradle
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.PREFER_PROJECT) // 允许项目级仓库
}
2、全局配置:
如果想要是对所有的项目生效,可以进行全局配置,在Gradle的根目录的init.gradle文件中(如果没有可以自己新建一个),但是主要不要重复配置,依然可能存在重复配置导致的冲突问题。(所以个人建议是在项目级别进行配置即可)