一、说明

近来想学习下android app的编程,但是没想到入门装个studio就遇到重重障碍,网上很多资料都是旧的,导致一直没找到问题的根源,折腾了好久。故记录一下,也希望能帮到同样需求的人。

二、gradle的版本兼容问题

gradle要考虑的兼容主要有两个,一个是jdk版本,一个是Android gradle plugin版本。下面是我找到的一个较新的版本对应关系: gradel-version

以我配置的环境为例,我选的gradle版本是7.4.2,那么jdk的版本就需要用11,我一开始用的8版本导致不成功。对应的Android gradle plugin版本是7.3,但是不能直接写7.3因为会提示没有这个版本,我选的是7.3.0。

这里一定要选好版本,可以减少很多不必要的折腾,如果你装了多个jdk版本,那么就需要谨慎了,需要在项目里做额外的指定配置。

另外,android studio 版本也有影响,如果使用gradle 8.0 版本,那我当前使用的“Dolphin | 2021.3.1 Patch 1”版本就不支持。。处处是坑。

三、问题

这里我把遇到的问题都列举下,除了版本兼容的问题。

3.1 多jdk设置问题

当环境下有多个jdk版本,且我们想使用指定的版本时,就需要额外设置。 在 Android studio 的菜单: File -> Settings ,然后按以下截图配置: gradle-jdk-setting

3.2 SSL问题

gradle在构建过程中会需要去下载gradle-7.4.2.pom这个文件(不清楚如何直接使用本地的文件),而去下载这个的时候报错了,错误信息如下:

> Could not resolve all files for configuration ':classpath'.
   > Could not resolve com.android.tools.build:gradle:7.4.2.
     Required by:
         project :
      > Could not resolve com.android.tools.build:gradle:7.4.2.
         > Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.4.2/gradle-7.4.2.pom'.
            > Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.4.2/gradle-7.4.2.pom'.
               > The server may not support the client's requested TLS protocol versions: (TLSv1.2, TLSv1.3). You may need to configure the client to allow other protocols to be used. See: https://docs.gradle.org/7.4/userguide/build_environment.html#gradle_system_properties
                  > sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

看报错信息的前面是说不支持TLS版本,但是最后提示是没有找到请求目标的有效证书路径。这个其实是因为java使用https去访问时需要验证SSL证书的有效性,如果访问目标的SSL证书不在java的信任库里面那就没法访问。所以,我们需要把这个目标的SSL证书添加到java的信任库里面。

下面说明如何添加这个信任库。 首先,访问https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.4.2,会报404,不用管。然后查看其证书,并导出证书到文件,截图如下: ssl-down-1 ssl-down-2 ssl-down-3 ssl-down-4

下载完后,打开CMD工具,然后去到项目使用的JDK的路径下。例如我的JDK路径是:C:\Program Files\Java\jdk-11,那CMD里面就是下面的操作:

cd C:\Program Files\Java\jdk-11\lib\security
keytool -import -file D:\\sortware\gradle-ssl.der -keystore cacerts -alias dl.google.com

D:\sortware\gradle-ssl.der 这个就是我导出的ssl证书文件;keystore 这个必须使用固定值"cacerts",否则不起作用,切记; alias 建议和域名保持一致。

如果要求输入密码,默认密码一般是"changeit"。

然后运行会要求确认,输入Y确认即可,出现证书已添加到密钥库中 则说明添加成功了。

添加成功后重启下studio自动构建就不会再出现这个报错了。

3.3 gradle 设置使用本地文件

默认情况下,gradle是配置的一个远程路径,我的项目创建后的默认配置是(gradle-wrapper.properties文件):

distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip

如果你想使用本地已下载好的gradle文件,那就需要修改这个配置,例如:

distributionUrl=file:///D:/sortware/gradle-7.4.2-all.zip

同时按照前面设置JDK的方式,在项目里设置好gradle的路径。都是同一个地方,就不加以说明了。