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 и помещаю их туда.

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