一、说明
近来想学习下android app的编程,但是没想到入门装个studio就遇到重重障碍,网上很多资料都是旧的,导致一直没找到问题的根源,折腾了好久。故记录一下,也希望能帮到同样需求的人。
二、gradle的版本兼容问题
gradle要考虑的兼容主要有两个,一个是jdk版本,一个是Android gradle plugin版本。下面是我找到的一个较新的版本对应关系:
以我配置的环境为例,我选的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 ,然后按以下截图配置:
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,不用管。然后查看其证书,并导出证书到文件,截图如下:
下载完后,打开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的路径。都是同一个地方,就不加以说明了。
...