当前位置:   article > 正文

AndroidStudio离线开发

androidstudio离线开发

请区分离线开发内网开发

  1. 离线开发完全不需要网络,什么都不能下载,只能通过U盘或光驱拉一些文件。
  2. 内网开发还可以连接内网服务器,比如要下gradle,可以在内网服务器放入gradle压缩包,然后在项目中配置内网gradle地址来使用。

这里纯离线开发,借鉴[地址意外关机找不到了]是csdn文章,用的eclipse。

一. AndroidStudio调整为离线模式开发

在这里插入图片描述

二. Gradle离线安装项目对应版本

报错信息

Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-6.1.1-bin.zip'
  • 1
  1. 首先检测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文件放到此目录下。

  2. 接下来回到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'
  • 1
  • 2

也就是找不到根目录下build.gradle中配置的gradle插件,因为缺少gradle插件会去网络下载,如果没有开启离线模式,会在Build窗口中也能看到如下错误提示

Unknown host 'dl.google.com'. You may need to adjust the proxy settings in Gradle.
  • 1

如果开启了离线模式会是如下错误信息

Could not resolve all artifacts for configuration ':classpath'.
  • 1

这是由于gradle插件已经和其它的gradle版本结合使用,当切换gradle版本,但不切换gradle插件版本就会报此错误

  1. gradle插件的错误,gradle插件本身就是一个jar包,会在.gradle\caches目录下生成缓存,只要第三大步操作正常即可避免
Could not resolve com.android.tools.build:gradle:3.5.3.
  • 1

三. 项目中网络依赖的缓存文件

缓存文件位置: 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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然后在Termial窗口中执行该任务 gradlew cacheToLocalMavenRepository,你会发现执行不了,因为第二步中的第3点没有gradle插件,所以要执行这个任务就要新建一个能使用gradle命令的项目

  1. 环境变量配置gradle的bin目录,如果你想在任何地方使用gradle命令,当然也可以用全路径来使用
  2. 最好在C盘用户下新建一个空文件夹作为gradle项目地址,进入该文件夹,cmd依次执行 gradle buildgradle init,init命令中会有很多的选择,选择构建java项目还是C项目等等。构建好后就有build.gradle文件了。
  3. 这时候在将上面的任务复制到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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

四、使用.m2/repository中的maven库并尝试编译运行android项目

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
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/298636
推荐阅读
相关标签
  

闽ICP备14008679号