如何为Android Studio配置类路径中库的顺序?
我想更改Android Studio类路径中库的顺序。我正试图在IDE中用JUnit4运行单元测试。这项工作遵循以下原则 我想知道是否可以通过Android Studio的运行配置来配置库的顺序(幻灯片中建议的除外) 第一次尝试是在项目模块的依赖项选项卡中更改项目结构对话框中的依赖项顺序,如屏幕截图所示 第二个猜测是在如何为Android Studio配置类路径中库的顺序?,android,gradle,android-studio,classpath,build.gradle,Android,Gradle,Android Studio,Classpath,Build.gradle,我想更改Android Studio类路径中库的顺序。我正试图在IDE中用JUnit4运行单元测试。这项工作遵循以下原则 我想知道是否可以通过Android Studio的运行配置来配置库的顺序(幻灯片中建议的除外) 第一次尝试是在项目模块的依赖项选项卡中更改项目结构对话框中的依赖项顺序,如屏幕截图所示 第二个猜测是在build.gradle文件中包含类路径配置。关于这一点,有一些模糊的想法: sourceSets.main.compileClasspath = file("foo.jar")
build.gradle
文件中包含类路径配置。关于这一点,有一些模糊的想法:
sourceSets.main.compileClasspath = file("foo.jar") + sourceSets.main.compileClasspath
- 资料来源:[],[]
.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的示例。我使用以下任务确保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)
}
除此之外,将任务添加到运行配置中。不幸的是,由于声誉不佳,我无法发布图像。但是:“Android Studio积极地重新写入依赖项列表(您的.iml文件),并颠覆了上述将Android SDK置于类路径底部的技术。每次重新打开项目时,您都会收到可怕的存根!异常(可能更频繁)。”-是的,不幸的是,android studio似乎没有很好的解决方案:(.我想这就是他们现在推荐Intellij的原因。你可以编写一个与我问题中提到的幻灯片中的脚本类似的脚本,然后连接到构建过程中,并在正确的时间更新
.iml
。如果你将图片上传到某个地方,我很乐意为你编辑你的帖子并将其包括在内。谢谢你。这不会有什么问题rk对我来说,直到我删除了doLast
部分…我想,出于某种原因,最后一次这么做太晚了?Pitty,我们必须用android studio解决类似的问题:/但是这个解决方案有很多东西,可能会派上用场!你可以通过gradle解决它:
gradle.projectsEvaluated {
preBuild.dependsOn(pushDownJdkDependency)
}