Как добавить связанную исходную папку в 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
Они построены с использованием символов отладки и по тем же абсолютным путям, точки останова, добавленные в исходные файлы, будут автоматически распознаваться.