如何配置gradle以“脱机”工作(使用缓存的依赖项)

时间:2015-08-23 21:05:14

标签: android android-studio gradle android-gradle android-build

我有一个命令行apk生成器,它使用相同的源代码编译了很多APK,因此这些应用程序具有相同的依赖关系。

在gradle文档中,我可以看到:

  

Gradle项目需要网络连接才能下载依赖项。

我知道可以将gradle配置为脱机工作,而不是下载为其他apks下载的相同依赖项。如何激活此离线模式?

5 个答案:

答案 0 :(得分:41)

Android Studio

在Android Studio中,您可以通过激活此选项,使Gradle可以完全脱机构建应用程序:

<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> <div id="panel"> <div class='resiz'>a</div> <div class='resiz'>b</div> <div class='resiz'>c</div> </div> - &gt; Settings - &gt; Build, Execution, Deployment - &gt; Build tools

enter image description here

Gradle CLI

在Gradle命令行界面中,您可以使用Gradle标志完成此操作。 Documentations对此标志的评价:

  

指定构建应在不访问网络资源的情况下运行。请参见第52.9.2节“覆盖缓存的命令行选项”。

答案 1 :(得分:37)

Gradle在避免重新加载工件方面做得很好,但您可以将--offline传递给成绩,以防止在构建期间访问网络。如果它需要来自网络的东西,而不是尝试获取它,那么你的构建将会失败。

答案 2 :(得分:10)

Android Studio(v。3.6.1及更高版本)

您可以通过激活此选项来完全离线构建应用程序:

这是Android Studio Gradle工具栏上的屏幕截图

disconnect gradle sync

答案 3 :(得分:1)

Gradle离线构建(通过缓存或本地存储库快速构建)(Android Studio v3.0 +)

配置离线构建依赖项(gradle + maven)

重要说明:离线回购中不存在的库或android gradle插件版本,它将从远程下载。

如果您要在没有网络连接的情况下构建项目,请遵循 以下步骤将IDE配置为使用Android Gradle的脱机版本 插件和Google Maven依赖项。

如果您还没有这样做,请download the offline components 下载页面。

下载并解压缩离线组件

下载脱机组件后,将其内容解压缩到 以下目录,如果尚不存在,则可能需要创建该目录:

  1. 在Windows上:%USER_HOME%/.android/manual-offline-m2/
  2. 在macOS和Linux上:~/.android/manual-offline-m2/

要更新离线组件,请按照下列步骤操作:

  1. 删除manual-offline-m2/目录中的内容。
  2. 重新下载 offline components
  3. 将下载的ZIP文件的内容解压缩到 <code>manual-offline-m2/目录。

在Gradle项目中包含离线组件

告诉Android构建系统使用您下载的离线组件 并解压缩后,您需要创建一个脚本,如下所述。请记住,你 只需要创建和保存一次此脚本,即使在离线更新后也是如此 组件。

  1. 使用以下路径和文件名创建一个空的文本文件:

    在Windows上:%USER_HOME%/.gradle/init.d/offline.gradle

    在macOS和Linux上:~/.gradle/init.d/offline.gradle

  2. 打开文本文件,并包含以下脚本:

    def reposDir = new File(System.properties['user.home'], ".android/manual-offline-m2")
    def repos = new ArrayList()
    reposDir.eachDir {repos.add(it) }
    repos.sort()
    allprojects {
      buildscript {
        repositories {
              for (repo in repos) {
                    maven {
                    name = "injected_offline_${repo.name}"
                    url = repo.toURI().toURL()
                          }
          }
        }
      }
      repositories {
        for (repo in repos) {
          maven {
            name = "injected_offline_${repo.name}"
            url = repo.toURI().toURL()
          }
        }
      }
    }
    
  3. 保存文本文件。

  4. (可选),如果您要验证离线组件是否可以正常工作 打算从项目的build.gradle中删除在线存储库 文件,如下所示。确认项目正确构建后 如果没有这些存储库,则可以将它们放回build.gradle 文件。

    buildscript {
        repositories {
    // Hide these repositories to test your build against
    // the offline components. You can include them again after
    // you&#39;ve confirmed that your project builds ‘offline’.
    // google()
    // jcenter()
        }
        ...
    }
    allprojects {
        repositories {
            // google()
            // jcenter()
        }
        ...
    }
    

注意:该脚本适用于您在工作站上打开的所有Gradle项目。

来源:https://developer.android.com/studio/intro/studio-config#offline

  • 从上述文档中下载Gradle插件和Maven并进行设置
  • 如果出现任何问题,请遵循下面的stackoverflow链接中的解决方案

Android Studio: Configure offline build dependencies


答案 4 :(得分:0)

我尝试使用这种方法在离线模式下进行构建。

  1. 我已经复制了 gradle 发行版 ZIP 并将其保存在本地。
  2. 为“distributionUrl”编辑了 gradle-wrapper.properties 以指向本地文件
  3. 当我尝试在 linux "./gradlew --offline build" 中执行构建命令时,它抛出错误:
<块引用>
A problem occurred configuring project ':MyApp'.
> Could not resolve all artifacts for configuration ':MyApp:classpath'.
   > Could not resolve com.android.tools.build:gradle:4.1.1
     Required by:
         project :MyApp
      > No cached version of com.android.tools.build:gradle:4.1.1 available for offline mode