Android Studio исключить класс из сборки?
Последние несколько месяцев я изучаю Android и использую Eclipse Juno в качестве своей IDE.
Я пытаюсь перейти на Android-Studio и удивляюсь, как я могу "исключить из пути сборки" некоторые классы, которые мне еще предстоит пройти?
В Eclipse это был прямой щелчок правой кнопкой мыши. Я не могу найти ссылку на это в студии.
7 ответов
AFAIK IntelliJ позволяет исключать пакеты. Откройте структуру проекта (Ctr+Alt+Shift+S в Linux) > Модули> Вкладка Источники.
Однако, если вы хотите исключить только один класс, используйте файл сборки Gradle.
Android Studio использует Gradle, поэтому в файле build.gradle добавьте в настройку Android пользовательский SourceSet, который исключает ваш класс, например:
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig {
minSdkVersion 19
targetSdkVersion 19
packageName "org.homelab.lab"
testPackageName "org.homelab.lab.test"
}
sourceSets {
main {
java {
exclude '**/SomeExcludedClass.java'
}
}
androidTest {
java {
exclude '**/TestSomeExcludedClass.java'
}
}
}
}
Прекрасно работает с Android Studio v3.0
apply plugin: 'com.android.application'
android {
defaultConfig {...}
buildTypes {...}
sourceSets {
main {
java {
exclude 'com/example/full/package/path/MainActivity.java'
}
}
}
}
Это не может быть сделано.
Возможно, это могло произойти еще в мае 13 года, когда был принят принятый ответ, но больше нет (по состоянию на 1.2).
Вот проблема:
https://code.google.com/p/android/issues/detail?id=64957
Согласно меткам они нацелены на AS 1.5 для добавления этих функций.
То, как я делал то же самое,
Для Windows: щелкните правой кнопкой мыши файл Java -> Показать в проводнике -> изменить расширение файла с ".java" на ".c"
Для Mac: щелкните правой кнопкой мыши файл Java -> Показать в Finder -> изменить расширение файла с ".java" на ".c"
Так просто.
Перекрестная публикация с /questions/29221991/kak-isklyuchit-fajlyi-kotlin-iz-kompilyatsii-s-pomoschyu-gradle/59158205#59158205 но кажется полезным повторить здесь.
Я нашел способ сделать эту работу специально для модульных тестов Android (но я предполагаю, что это можно адаптировать), используя комбинацию других решений из приведенной выше ссылки:
def filesToExclude = [
'**/*TestOne*.kt',
'**/*TestTwo*.kt',
...
]
tasks.withType(org.gradle.api.tasks.SourceTask.class).configureEach {
it.exclude(filesToExclude)
}
android.sourceSets.test.kotlin.exclude(filesToExclude)
В моем конкретном случае дополнительные символы подстановки вокруг имени теста были необходимы из-за возникновения другого поколения (в частности, Dagger с kapt).
Это кажется немного хакерским подходом, но он работает, гарантируя, что тестовая цель исключена из всех задач, из которых она действительно может быть исключена (включая задачи сборки и kapt). Исключение sourceSets по-прежнему необходимо для того, чтобы файл не был выбран для компиляции (я думаю, что это делает плагин Kotlin Gradle, но это также может быть плагин Android Gradle - я недостаточно хорошо разбираюсь в отладке сборок Gradle, чтобы придавите его).
В моем случае мне нужно предотвратить целую папку , тогда я сделал это следующим образом:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
java {
exclude 'com/example/myfolder'
/* The holder name I want to excludes its all classes */
}
}
}
Переместите его в новую папку. Щелкните правой кнопкой мыши -> Показать в проводнике -> вырезать, а затем вставить в новую папку (вне любого проекта). Я просто создаю новую папку внутри папки AndroidStudioProjects и помещаю их туда.