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

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

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

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

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]

Ответы

Ответ 1

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

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

Ответ 2

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