android - 如何离线使用所有 Android gradle 依赖项(maven 文件结构)

标签 android android-studio android-gradle-plugin

我需要提供一个Android软件开发环境(SDE),用于基于Android Studio(AS)和gradle的android编码培训。

我梦想着一个完全自给自足、自给自足的 SDE。

目录结构如下所示:

<Root-folder>
   |- Android Studio
   |- android-sdk
   |- gradle-2.2.1
   |- jdk1.7.0_75_64 
   |- jdk1.7.0_75_32
   |- localM2repo 
   |- <git-project checkout>
       |- Android project 01     (with checked-in AS metadata)
       |- Android project 02     (with checked-in AS metadata)

此 SDE 会附带您需要的所有方面。它将完全离线兼容,即您可以跳上火车并编写数小时的代码,而无需连接到互联网。

我编写了一些脚本,除一件事外一切正常:

虽然我似乎可以使用所有依赖项脱机,正如我将在下面描述的那样,但我无法针对我的“脱机”本地 maven 存储库 (folder=localM2repo) 运行 Android Studio。

请记住:根本没有涉及 maven 软件,gradle 只是使用由

解决的 maven 存储库结构
repositories {
    maven { url 'file:///<Root-folder>localM2repo' }
}

代替

repositories {
    jcenter()
    mavenLocal()
    maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}

我的 Android 应用依赖项通常如下所示:

compile "com.android.support:appcompat-v7:$comAndroidSupport_supportV7Version"
compile "com.android.support:support-v4:$comAndroidSupport_supportV4Version"
compile "com.github.machinarius:preferencefragment:$comGithubMachinarius_preferenceFragmentVersion"
compile "com.google.android.gms:play-services:$comGoogleAndroidGms_playServicesVersion"

compile 'com.android.tools.build:gradle:1.0.1'
compile 'com.github.jcandksolutions.gradle:android-unit-test:2.1.1'

testCompile "junit:junit:$junitVersion"
testCompile "org.robolectric:robolectric:$orgRobolectricRobolectricVersion"
testCompile "org.mockito:mockito-core:$orgMockitoMockitoCoreVersion"

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'

另外我还有一些构建脚本依赖项。

什么起作用

我可以使用所有显式依赖项“下线”。以下代码 fragment 将所有 testCompile 依赖项提取到我的本地 maven 存储库中。我可以对其他范围(androidTestCompile、编译……)做同样的事情

task makeLocalM2Repob(dependsOn: makeLocalM2Repoa, type: Copy) {
    destinationDir = buildDir
    into('localM2repo') {
        def fileRenameMap = [:];
        from configurations.testCompile.resolvedConfiguration.resolvedArtifacts.collect { dependency ->
            def groupAsPath = dependency.moduleVersion.id.group.replace('.' as char, File.separatorChar)
            def version = dependency.moduleVersion.id.version
            def newFileName = "${groupAsPath}/${dependency.name}/${version}/${dependency.name}-${version}.${dependency.type}"
            fileRenameMap[dependency.file.name] = newFileName
            dependency.file
        }
        rename { oldName -> fileRenameMap[oldName] }
    }
}

什么不起作用

尽管在我看来所有依赖项在浸出后都可用,但我在 AS 中启动项目时收到以下错误:

Gradle project sync failed. ...

Error:Unable to load class 'com.android.utils.ILogger'.
Possible causes for this unexpected error include:<ul><li>You are using JDK version 'java version "1.7.0_75"'. Some versions of JDK 1.7 (e.g. 1.7.0_10) may cause class loading errors in Gradle.
Please update to a newer version (e.g. 1.7.0_67).
...

我得到这个错误,即使我

  • 删除 ~/.gradle/caches
  • 删除/Android studio/gradle/*
  • 点击 Android Studio 的文件/使缓存无效
  • 我完全确信 Android Studio 引用了正确的 JDK、Android-SDK 和 gralde 安装路径。

这个错误让我想起了this bug here

问题

  • 我还需要学习什么才能获得完全离线兼容的 maven 可以通过 gradle 处理以与 Android 一起工作的存储库 工作室?
  • 我是否需要添加更多的隐式依赖项?
  • 我还可以使什么无效以使 AS 按我的意愿运行?
  • Android Studio 不应该以这种方式工作吗?

最佳答案

错误消息表明您的 Java 环境已过时。尝试在 Java SE Downloads 上下载一个新的.

不过据我所知current Android Studio release支持离线构建,随附本地 Gradle 分发版和构建工具的本地 Maven 存储库。

因此我很关心如何将它们集成到 IntelliJ IDEA 中,因为一些 Ultimate 功能非常有用。如果您或其他任何人找到它,请不要忘记告诉我。谢谢

关于android - 如何离线使用所有 Android gradle 依赖项(maven 文件结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327694/

相关文章:

android - MvxRecyclerView Fluent API 绑定(bind)

android - 未生成数据绑定(bind)类

android - 当我使用 FFmpeg 库压缩视频时,隐藏显示此错误

android studio gradle依赖项失败,没有错误

android - 是否必须使用api 22 Lollipop 编译我的应用程序?

intellij-idea - 如何在 Android Studio 中移动(上/下)代码行?

android - 如何在 android studio 中启用 Jack (Java Android Compiler Kit)

Android 谷歌地图 V2 加载到 fragment 中

android - Gradle 构建错误 : Cannot get property 'dirName' on null object

android - 如何更改发布 APK 神器的路径?