Как добавить связанную исходную папку в Android Studio?

В Eclipse я могу добавить исходную папку в свой проект Android в качестве "связанной исходной папки". Как мне добиться того же в Android Studio?

Или можно добавить внешнюю папку для сборки в Gradle?

7 ответов

Решение

В вашем build.gradle добавьте следующее в конец узла Android

android {
    ....
    ....

    sourceSets {
        main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
    }

}

Правильный ответ:

android {
    ....
    ....

    sourceSets {
        main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
    }
}

Кроме того, если ваш внешний исходный каталог не находится под src/mainВы можете использовать относительный путь, как это:

sourceSets {
    main.java.srcDirs += 'src/main/../../../<YOUR DIRECTORY>'
}

Вы можете добавить исходную папку в скрипт сборки и затем синхронизировать. Ищите исходные наборы в документации здесь: http://tools.android.com/tech-docs/new-build-system/user-guide

Я не нашел хорошего способа добавления тестовых исходных папок. Я вручную добавил источник в файл.iml. Конечно, это означает, что он исчезнет при каждой синхронизации сценария сборки.

На всякий случай, если кому-то интересно, вот полный файл Gradle модуля Java, который правильно генерирует и ссылается на встроенные артефакты в мультимодульном приложении Android

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "net.ltgt.gradle:gradle-apt-plugin:0.15"
    }
}

apply plugin: "net.ltgt.apt"
apply plugin: "java-library"
apply plugin: "idea"

idea {
    module {
        sourceDirs += file("$buildDir/generated/source/apt/main")
        testSourceDirs += file("$buildDir/generated/source/apt/test")
    }
}

dependencies {

    // Dagger 2 and Compiler
    compile "com.google.dagger:dagger:2.15"
    apt "com.google.dagger:dagger-compiler:2.15"
    compile "com.google.guava:guava:24.1-jre"

}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

В то время как sourceSets позволяет вам включать целые структуры каталогов, нет возможности исключить их части в Android Studio ( начиная с версии 1.2), как описано здесь: Android Studio Исключить класс из сборки?

До тех пор, пока Android Studio не будет обновлена ​​для поддержки директив include / exclude для исходников Android, Symlinks работает достаточно хорошо. Если вы используете Windows, родные инструменты, такие как junction или же mklink может выполнить эквивалент Un*x символических ссылок. CygWin также может создавать их с небольшим усилием. Смотрите: Git Symlinks в Windows и Как создать символическую ссылку с помощью cygwin в Windows 7

Это для Kotlin DSL (build.gradle.kts):

      android {
    sourceSets["main"].java.srcDirs("src/main/myDirectory/code/")
    sourceSets["main"].resources.srcDirs("src/main/myDirectory/resources/")

    // Another notation:
    // sourceSets {
    //     getByName("main") {
    //         java.srcDirs("src/main/myDirectory/code/")
    //         resources.srcDirs("src/main/myDirectory/resources/")
    //     }
    // }
}

Если вы не используете gradle (например, создаете проект из APK), это можно сделать с помощью пользовательского интерфейса Android Studio (начиная с версии 3.3.2):

  • Щелкните правой кнопкой мыши корневой каталог проекта, выберите Open Module Settings
  • Ударь + Add Content Root кнопка (в центре справа)
  • Добавьте свой путь и нажмите OK

По моему опыту (с нативным кодом), пока ваш .soОни построены с использованием символов отладки и по тем же абсолютным путям, точки останова, добавленные в исходные файлы, будут автоматически распознаваться.

Другие вопросы по тегам