Как настроить порядок библиотек в classpath для Android Studio?

Я хотел бы изменить порядок библиотек в classpath для Android Studio. Я пытаюсь запустить модульные тесты с JUnit 4 из среды IDE . Это работает после инструкции в этих слайдах .

Интересно, можно ли настроить порядок библиотек – другой, предложенный в слайдах – через « Запуск конфигурации Android Studio»?

Первой попыткой было изменить порядок зависимостей в диалоговом окне « Структура проекта » на вкладке « Зависимость » модуля проекта, как показано на скриншоте.

Структура проекта

Вторая предпосылка заключалась в том, чтобы включить конфигурацию пути к классам в файл 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 ]

Я использую следующую задачу, чтобы убедиться, что зависимость 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) } 

Кроме этого, добавьте задачу в свою конфигурацию запуска. К сожалению, я не могу отправлять изображения из-за отсутствия репутации.

Вы должны изменить файл проекта .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 .