如何在Android Studio的类路径中配置库的顺序?

时间:2014-04-04 13:11:57

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

我想在Android Studio的类路径中更改库的顺序。我正在尝试使用来自IDE 中的的JUnit 4 运行单元测试。这适用于instruction in these slides

我想知道是否可以配置库的顺序 - 幻灯片中建议的其他内容 - 通过Android Studio的运行配置

第一次尝试是在项目模块的 Dependency 选项卡中更改 Project Structure 对话框中的依赖项顺序,如屏幕截图所示。

Project Structure

第二个猜测是在build.gradle文件中包含类路径配置。关于此,有一些含糊不清的想法:

sourceSets.main.compileClasspath = file("foo.jar") + sourceSets.main.compileClasspath

...

sourceSets.test.compileClasspath = configurations.robo + sourceSets.test.compileClasspath
sourceSets.test.runtimeClasspath = configurations.robo + sourceSets.test.runtimeClasspath
  • 来源:[ 1],[2]

2 个答案:

答案 0 :(得分:7)

我使用以下任务来确保最后列出了SDK依赖项:

task pushDownJdkDependency {
    def imlFile = file("ui.iml")
    doLast {
        try {
            def parsedXml = (new XmlParser()).parse(imlFile)
            def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }

            parsedXml.component[1].remove(jdkNode)
            new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': "Android API 18 Platform", 'jdkType': 'Android SDK'])
            def writer = new StringWriter()
            new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
            imlFile.text = writer.toString()

        } catch (FileNotFoundException e) {
            // nop, iml not found
        }
    }
}

确保使用正确的SDK标识符。然后将任务挂钩到构建过程中:

gradle.projectsEvaluated {
    preBuild.dependsOn(pushDownJdkDependency)
}

除此之外,将任务添加到运行配置中。不幸的是,由于缺乏声誉,我无法发布图片。

答案 1 :(得分:1)

您必须修改项目.iml文件以将JDK作为最后一个条目,如下所示:

    <orderEntry type="library" 
                exported="" 
                scope="TEST" 
                name="wagon-provider-api-1.0-beta-6" 
                level="project" />
    <orderEntry type="library" 
                exported="" 
                scope="TEST" 
                name="xercesMinimal-1.9.6.2" 
                level="project" />
    <!-- make sure this is the last orderEntry -->
    <orderEntry type="jdk" 
                jdkName="Android API 19 Platform" 
                jdkType="Android SDK" /> 
  </component>
</module>

有关完整工作示例,请参阅Robolectric的 deckard-gradle 示例。