Android导入项目及环境说明

配置 build | Android Studio | Android Developers

这里有完整的Android项目构建的不同部分的说明,可以根据需求点击跳转去查看

环境说明

首先需要知道的是不同的版本的Android Studio支持的AGP版本范围是不同的,不同的AGP能支持的Gradle版本也是不同的,项目使用不同的API版本也需要不同的AGP支持,这就是几者之间的关系,具体需要可以参考官网。

Android Gradle 插件 8.4 版本说明 | Android Studio | Android Developers (google.cn)

而项目使用的JDK只是构建项目使用

导入项目因版本不匹配出现的编译错误

一般JDK版本是没什么问题的,可以在project structure中选择SDK Location,里面…可以找到jdk的设置,如果项目sync失败可以进去看看,顺便看JDK有没有问题再做其他修改了,也可以在setting中直接搜索Gradle也可以找到。

主要看API版本先,旧版的Gradle构建出来的项目是可以在project级别的build.gradle中看到具体的API的版本,不行可以在app的build.gradle中看到具体的API版本,但是不同项目结构下可能出现的位置不同,在了解到具体的API版本后就可以确认AGP所需要的版本

image-20240519220504876

原本项目使用的SDK版本是34,需要最低AGP版本为8.1.1,但是我的Android Studio版本为Giraffe | 2022.3.1,可能无法支持这个AGP,那么我会考虑降低API版本为33,这时候就可以满足版本了,这里选择AGP8.0.0和Gradle8.0即可,这里就需要修改AGP版本,在新版构建的项目中可以在lib.versions.toml文件中修改AGP版本

image-20240519220855441

旧版本可以在project的build.gradle中的plugin中找到下面,就是AGP版本

image-20240519221031789

修改Gradle版本就简单了,在File->Project Structure->Project中就可以修改Gralde的版本和看到使用的AGP版本了,在下面的SDK Location中还可以看到SDK的位置和查阅SDK的版本和修改SDK版本,版本不对可以直接在这里下载所需要的SDK版本。

这里需要注意的是,在一些新版本后,Google将AGP的下载默认到了一个仓库,这时候需要确认这个仓库里面有你要的AGP版本,虽然新建项目构建的时候有8.3.0,但其他电脑直接导入项目可以发现就是下载不下来,说找不到,这时候可以去下面的仓库去确认一下,如果里面只有8.3.2,就只能使用这个版本了,实在不行更新android studio自动导入吧,有些版本的android studio有bug

到这里安心等待项目的构建即可,但是可以发现有时候构建是非常慢的,具体可以看一下下面gradle的安装和配置原理了解一下

gradle的安装和配置原理

  1. 在Android打开一个工程的时候,首先在项目的gradle文件夹下的gradle-wrapper.properties 文件,从而知道这个工程需要使用的gradle的版本,然后就会去保存gradle文件夹的GRADLE_USER_HOM去查看是否存在这个版本的gradle
  2. 不存在就通过distributionUrl 去下载
1
2
3
4
5
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip

这里可以看一下这个文件

  • distributionBase:distributionBase和distributionPath组合在一起,是distributionUrl下载的gradle文件解压之后的文件的存放位置。

  • distributionPath:distributionPath是distributionBase指定的目录下的子目录。

  • zipStoreBase:zipStoreBase和zipStorePath组合在一起,是distributionUrl下载的gradle文件所存放的位置。

  • zipStorePath: zipStorePath是zipStoreBase指定的目录下的子目录。

    zipStoreBasedistributionBase有两种取值:GRADLE_USER_HOMEPROJECT

    其中,GRADLE_USER_HOME表示用户目录。 在windows下是%USERPROFILE%/.gradle,例如C:\Users<user_name>.gradle\。 在linux下是$HOME/.gradle,例如~/.gradle

    PROJECT表示工程的当前目录,即gradlew所在的目录。)

  • distributionUrl:要下载的gradle的地址,使用哪个版本的gradle,就在这里修改。

    gradle的3种版本:

    • gradle-xx-all.zip是完整版,包含了各种二进制文件,源代码文件,和离线的文档。
    • gradle-xx-bin.zip是二进制版,只包含了二进制文件(可执行文件),没有文档和源代码。
    • gradle-xx-src.zip是源码版,只包含了Gradle源代码,不能用来编译你的工程。

​ 如果只是为了编译,可以不用完整版,只需要二进制版即可,例如,gradle-8.0-bin.zip。

具体分析

  1. https://services.gradle.org/distributions/gradle-8.0-bin.zip 下载gradle的8.0版本,只包含binary的版本。
  2. 下载的gradle-8.0-bin.zip存放到C:\Users.gradle\wrapper\dists目录中。 (注:具体还有2级目录,即全路径为C:\Users<user_name>.gradle\wrapper\dists\gradle-8.0-bin<url-hash>\gradle-8.0-bin目录是根据下载的gradle的文件名来定的,目录名是根据distribution url路径字符串计算md5值得来的,具体参考PathAssembler.java中的rootDirName()getHash()
  3. 解压gradle-8.0-bin.zip,将解压后的文件存放到C:\Users<user_name>.gradle\wrapper\dists中。(注:具体还有2级目录,同上)

加速gradle下载

根据上面的介绍就可以知道,distributionUrl指定过程所需要的gradle的下载路径,但是这个路径显然是国外的路径,下载非常缓慢,那么解决这个问题一个方法就是使用腾讯云的镜像,具体可以参考下面使用腾讯云的镜像,还有就是自己手动去下载gradle的压缩包,然后放置到正确的位置,等待android studio完成解压构建了。手动方法如下

(1) 修改gradle-wrapper.properties 修改gradle-wrapper.properties 中的 distributionUrl,改成我们想要的版本,只改后面的版本就可以了,前面的部分不要改。具体版本看下面链接:

Gradle下载地址:https://services.gradle.org/distributions/

(2) 打开项目 这个时候AS将自动下载gradle,并创建好目录。这时直接干掉Android Studio并退出,因为这一步是为了得到AS自动创建的下载目录,定位到下面的目录:

Linux:~/.gradle/wrapper/dists

windows:C:\users{user name}.gradle\wrapper\dists

进入对应的gradle版本文件夹下,会发现有一个一串乱码的文件夹 (2) 下载gradle 从上面的Gradle下载地址,下载对应版本的gradle,本例中为gradle-8.0-all.zip,然后删除上图中的gradle-8.0-all.zip.part文件,将下载的gradle-8.0-all.zip复制到上图中一串乱码的文件夹下,注意不要解压。这样我们就跳过了下载gradle这一步。

(3) 重新开启Android Studio,打开工程,ok,一下子就打开了.

Android Studio lib、plugin 和 gradle 使用阿里云和腾讯镜像加速下载

1. 配置不使用proxy

可以在设置中看到proxy的配置情况,这里配置不使用即可

image-20240529110432583

(在一开始安装AS的时候可以勾选Do not show this dialog in future之后点击no可以避免频繁弹窗同时避免配置proxy影响gradle和插件的下载)

2. 配置腾讯云的gradle仓库

  1. 把工程切换到 Porject 模式进行显示

  2. 打开 gradle –> wrapper 目录下的 gradle-wrapper.properties 文件

  3. https\://services.gradle.org/distributions/gradle-XXXXXX 修改为对应的腾讯镜像地址 https\://mirrors.cloud.tencent.com/gradle/gradle-XXXXXX

    image-20240529201752729

3. 配置阿里云仓库镜像

仓库服务 (aliyun.com)

最后一个不是阿里云的仓库,是一些第三方库可能用到的仓库

1
2
3
4
5
6
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url "https://jitpack.io" }

image-20240529203021194

image-20240529203040049

注意:在一个项目构建的时候,同步可能出现Plugin [id: ‘com.android.application’, version: ‘8.1.2’, apply: false]无法找到的错误,这是因为可能在阿里云的仓库中不存在这个版本的插件,具体可以自己在阿里云的仓库中搜索一下看存在哪个版本,使用该版本即可,当然其实依赖导入是不会很慢的,可以不配置阿里云镜像,或者配置阿里云景象的同时也保留谷歌的仓库

出现插件下载失败的情况

情况一:检查是否走了全局proxy代理,在

项目的gradle.properties中看是否有类似下面的代码,有则进行注释

1
2
3
4
systemProp.http.proxyHost=mirrors.neusoft.edu.cn
systemProp.https.proxyHost=mirrors.neusoft.edu.cn
systemProp.https.proxyPort=80
systemProp.http.proxyPort=80

在c盘的user->自己的本机用户名->.gradle中看wrapper下面是否有一个gradle或者gradle.properties文件,其中配置了全局代理也进行删除

情况二:配置阿里云仓库服务进行下载,看是否能下载成功

情况三:查看是否存在依赖的版本和插件冲突的问题等等