赞
踩
请区分离线开发
和内网开发
这里纯离线开发,借鉴[地址意外关机找不到了]是csdn文章,用的eclipse。
报错信息
Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-6.1.1-bin.zip'
首先检测File | Settings | Build, Execution, Deployment | Gradle
中Gradle user home的配置。AndroidStudio会自动在这个目录下的wrapper/dists目录下创建gradle-wrapper.properties
文件中配置的gradle版本目录,例如版本为x.x.x,那么目录为gradle-x.x.x-bin目录,并且目录下有个随机码的目录,你需要将提前准备的gradle-x.x.x-bin.zip文件放到此目录下。
接下来回到AndroidStudio中同步应用,会发现项目中生成了.gradle目录,然后在Terminal窗口中执行gradled version
,你会发现无法使用。报错信息第一个为
> Could not download gradle.jar(com.android.tools.build:gradle:3.5.3)
> Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.jar'
也就是找不到根目录下build.gradle中配置的gradle插件,因为缺少gradle插件会去网络下载,如果没有开启离线模式,会在Build窗口中也能看到如下错误提示
Unknown host 'dl.google.com'. You may need to adjust the proxy settings in Gradle.
如果开启了离线模式会是如下错误信息
Could not resolve all artifacts for configuration ':classpath'.
这是由于gradle插件已经和其它的gradle版本结合使用,当切换gradle版本,但不切换gradle插件版本就会报此错误
Could not resolve com.android.tools.build:gradle:3.5.3.
缓存文件位置: C:\用户\某用户\.gradle\caches\modules-2\files-2.1\
,将缓存好的对应的依赖包放到离线环境中。
这时候这些缓存文件在项目中是完全不能用的,需要将这些缓存变为maven资源才能使用
在build.gradle中写一个task任务,将缓存中的文件全部复制到.m2/repository
task cacheToLocalMavenRepository(type: Copy) {
from new File(gradle.gradleUserHomeDir, 'caches/modules-2/files-2.1')
into repositories.mavenLocal().url
eachFile {
List<String> parts = it.path.split('/')
it.path = (parts[0]+ '/' + parts[1]).replace('.','/') + '/' + parts[2] + '/' + parts[4]
}
includeEmptyDirs false
}
然后在Termial窗口中执行该任务 gradlew cacheToLocalMavenRepository
,你会发现执行不了,因为第二步中的第3点没有gradle插件,所以要执行这个任务就要新建一个能使用gradle命令的项目
gradle build
和 gradle init
,init命令中会有很多的选择,选择构建java项目还是C项目等等。构建好后就有build.gradle文件了。gradlew cacheToLocalMavenRepository
就可以了,这里用的是gradlew命令,看下项目下有没有gradlew程序,没有还用gradle命令也行。注意任务中文件目录的调整,因为项目根目录变了
task cacheToLocalMavenRepository(type: Copy) {
from new File('../.gradle/caches/modules-2/files-2.1')
into "../.m2/repository"
eachFile {
List<String> parts = it.path.split('/')
it.path = (parts[0]+ '/' + parts[1]).replace('.','/') + '/' + parts[2] + '/' + parts[4]
}
includeEmptyDirs false
}
android项目根目录下的maven仓库配置调整为mavenLocal()
,之前的google()
和jcenter()
等其它联网的仓库留着不动就行,因为离线模式运行也不会用到它们。
然后运行基本就可以了,但是有些项目中的依赖会失败,比如我的项目就报了解析retrofit2:retrofit:2.4.0和retrofit2:converter-gson:2.4.0下的pom文件错误。
Could not parse POM .m2\repository\com\squareup\retrofit2\retrofit\2.4.0\retrofit-2.4.0.pom
Could not parse POM .m2\repository\com\squareup\retrofit2\converter-gson\2.4.0\converter-gson-2.4.0.pom
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。