Gradle脱机构建不适用于Mac 10.9.3

时间:2014-06-24 21:13:06

标签: gradle android-studio build.gradle

我想使用没有互联网连接的android studio 6.0,为此,我设置了这个选项:

  

偏好设置> Gradle>离线工作

但我仍然收到消息:

  

Gradle项目同步失败。基本功能(例如编辑,   调试)将无法正常工作

当我尝试编译时,我得到错误:

  

运行应用程序时出错:Gradle项目同步失败。请修复你的项目   然后再试一次。

有人可以帮助我或者遇到同样的问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

虽然我不知道确切的问题是什么,但我可以建议一种解决方法。

build.gradle改为开头:

buildscript {
    repositories {
        if ('allow' == System.properties['build.network_access']) {
            mavenCentral()
        } else {
            maven {
                url 'dependencies'
            }
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.0-beta2'
    }
}

apply plugin: 'com.android.application'

因此,当定义build.network_access=allow gradle系统属性时,将使用在线mavenCentral()存储库。否则,build将在dependencies文件夹中使用本地脱机maven存储库。

现在的诀窍是生成本地离线maven存储库。为此,我使用此脚本(fetch_dependencies.py):

#!/usr/bin/python

import sys
import os
import subprocess
import glob
import shutil

# Place this in build.gradle:
# repositories {
#     if ('allow' == System.properties['build.network_access']) {
#         mavenCentral()
#     } else {
#         maven { url 'dependencies' }
#     }
# }
def main(argv):
    project_dir = os.path.dirname(os.path.realpath(__file__))
    repo_dir = os.path.join(project_dir, "dependencies")
    temp_home = os.path.join(project_dir, ".gradle_home")
    if not os.path.isdir(temp_home):
        os.makedirs(temp_home)
    subprocess.call(["gradle", "-g", temp_home, "-Dbuild.network_access=allow"])
    cache_files = os.path.join(temp_home, "caches/modules-*/files-*")
    for cache_dir in glob.glob(cache_files):
        for cache_group_id in os.listdir(cache_dir):
            cache_group_dir = os.path.join(cache_dir, cache_group_id)
            repo_group_dir = os.path.join(repo_dir, cache_group_id.replace('.', '/'))
            for cache_artifact_id in os.listdir(cache_group_dir):
                cache_artifact_dir = os.path.join(cache_group_dir, cache_artifact_id)
                repo_artifact_dir = os.path.join(repo_group_dir, cache_artifact_id)
                for cache_version_id in os.listdir(cache_artifact_dir):
                    cache_version_dir = os.path.join(cache_artifact_dir, cache_version_id)
                    repo_version_dir = os.path.join(repo_artifact_dir, cache_version_id)
                    if not os.path.isdir(repo_version_dir):
                        os.makedirs(repo_version_dir)
                    cache_items = os.path.join(cache_version_dir, "*/*")
                    for cache_item in glob.glob(cache_items):
                        cache_item_name = os.path.basename(cache_item)
                        repo_item_path = os.path.join(repo_version_dir, cache_item_name)
                        print "%s:%s:%s (%s)" % (cache_group_id, cache_artifact_id, cache_version_id, cache_item_name)
                        shutil.copyfile(cache_item, repo_item_path)
    shutil.rmtree(temp_home)
    return 0

if __name__ == "__main__":
    sys.exit(main(sys.argv))

它将以在线模式运行构建以下载所有依赖项。之后,它会将jar和poms复制到dependencies文件夹中,在那里创建一个本地maven存储库。您甚至可以将此dependencies文件夹推送到源代码管理中。

之后,您可以使用gradle --offline build(或仅gradle build)或使用Android Studio离线构建。