android - 如何通过在 Android-Studio 中编辑 build.gradle 将我的库放在 android.jar 前面

标签 android android-studio gradle android-gradle-plugin

首先这是我在 Eclipse 中的 Java 构建路径: enter image description here

common.jar,core.jar,framework.jar,layout.jar这四个jar是从Android源码中打包出来的,其中包含了一些开发者不能公开使用的类,他们不需要被导出是因为它们用于作弊编译器。在 Eclipse 中一切正常。

现在我正在尝试使用 gradle 将我的项目导入到 Android-Studio。我已经将 jars 添加到依赖项中,但是我无法更改我的 jars 和 android jar 的编译顺序。我不能把这些jar放在android jar前面。我不熟悉gradle,现在编译器在这些jar中找不到类。任何帮助将不胜感激! 这是我的 build.gradle:

apply plugin: 'android'    
dependencies {

    compile files('jars/common.jar')
    compile files('jars/core.jar')
    compile files('jars/framework.jar')
    compile files('jars/layout.jar')
    compile fileTree(dir: 'libs', include: '*.jar')
    compile files('jars/animation_nineoldandroids_src.jar')
    compile files('jars/json_simple_src.jar')
    compile files('jars/jsoup-1.7.2-sources.jar')
}

android {

    compileSdkVersion 17
    buildToolsVersion "21.1.1"
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

最佳答案

您不能在 Gradle(*) 中做您想做的事,至少在撰写本文时的可预见的 future 是这样。有几个问题阻碍了您:

  • Gradle 不会像 Eclipse 那样对构建类路径中的依赖项进行排序,这就是您将类放在 android.jar 之前的做法。 Gradle 的哲学是你应该在你的构建中明确依赖关系,这样正在发生的事情是可以理解和可重复的;依赖类路径排序的系统往往是微妙而脆弱的。所以你需要做的是告诉 Gradle 你的项目依赖于你的自定义类而不是 android.jar,但是插件的 DSL 没有给你这样做的方法。在 http://forums.gradle.org/gradle/topics/classpath_ordering_again 有一些讨论和 http://www.gradle.org/docs/current/userguide/dependency_management.html
  • 另一种看待它的方式是对 android.jar 的引用被硬编码到 Android Gradle 插件中,因此您无法获取该依赖项并将其替换为其他内容。

(*) 说了这么多,没有什么是不可能的——你可以让它工作,但你将不得不一起破解一些东西,所以它比 Eclipse 方法更容易出问题,也更难面对 SDK 和工具更新进行维护。当出现问题时,您将只能靠自己。

  • 您可以使用您自己的 android.jar 组装您自己的自定义 SDK。
  • 您可以破解 Android Gradle 插件。这种方法肯定很难——那里的学习曲线相当陡峭,而且代码正在大量开发中,这将成为您试图保持最新状态的维护负担。

我犹豫是否要对这两种方法中的任何一种提供更多见解,部分原因是我对此知之甚少,很容易给你不好的建议,部分原因是我不希望没有经验的开发人员看到这个想法这是一件很棒的事情。但是如果你弄明白了,那将是非常值得写的,因为我以前见过这种问题,所以你不是唯一一个。

关于android - 如何通过在 Android-Studio 中编辑 build.gradle 将我的库放在 android.jar 前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441398/

相关文章:

android - 如何在没有硬件加速的情况下在 Windows 8 上为 API 21 和 19 运行适用于 Intel x86 Atom 的 Android 模拟器?

android - EditText 中的 Drawable 会导致 Activity 崩溃

Android Gradle 从 apk 中删除资源

android-studio - 完成只能调用一次:Android

Gradle sonarqube 无法识别常规测试

java - 如何将任何类型的文件从 Assets 文件移动/复制到 JAVA 中的范围存储 ANDROID Q?

android - 疯狂混合 Android 外部 JAR 和 JNI

java - android studio 与 Java 编译器错误 : string too large to encode using UTF-8 written instead as 'STRING_TOO_LARGE'

android - Proguard 与 gson 和 jackson 的问题

android - 如何使用Gradle从Maven获取/打印已解析的依赖项组,名称和版本?