【问题标题】:Exclude a class from the build in Android StudioAndroid Studio 从构建中排除类?
【发布时间】:2013-05-18 01:33:33
【问题描述】:

过去几个月我一直在学习 Android,并且一直使用 Eclipse Juno 作为我的 IDE。

我正在尝试迁移到 Android-Studio,并想知道如何“从构建路径中排除”一些我尚未完成的类?

在 Eclipse 中,直接右键单击即可。我在 Studio 中找不到任何对它的引用。

【问题讨论】:

  • 如果您正在学习,为什么要尝试迁移到需要经验才能成功使用并解决其中各种错误的未发布预览产品?
  • 好问题西蒙。我看到墙上的文字。此外,在文档和 StackOverflow 之间,我已经能够构建一个应用最佳实践的应用程序。

标签: android android-studio ide buildpath


【解决方案1】:

AFAIK IntelliJ 允许排除包。打开项目结构(Linux 中的 Ctr+Alt+Shift+S)> 模块 > 源选项卡。

但是,如果您只想排除一个类,请使用 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'
        }
     }
  }
 }

【讨论】:

  • 我们可以排除构建类型中的文件吗?如果可能的话,我们可以像在 sourceSets 中那样做吗?
  • 答案已过时。第一部分对我不起作用。第二部分可能不会
  • 目前可以使用 AndroidStudio 3.1。不错的功能是构建忽略了 java 类,但您仍然可以看到检查列出的错误等。在重构代码时非常有用,并且即使旧代码与依赖项不兼容,您也希望保留旧代码以供参考当您更改代码时。
  • 它不起作用。任何更新?自发布此答案以来发生了什么变化?
  • 有什么更新吗?也遇到了这个问题!
【解决方案2】:

适用于 Android Studio v3.0

apply plugin: 'com.android.application'

android {
    defaultConfig {...}
    buildTypes {...}
    sourceSets {
        main {
            java {
                exclude 'com/example/full/package/path/MainActivity.java'
            }
        }
    }
}

【讨论】:

    【解决方案3】:

    做不到。

    也许它可以在 13 年 5 月提供接受的答案时返回,但不再是(从 1.2 开始)。

    这是问题所在:
    https://code.google.com/p/android/issues/detail?id=64957

    根据他们针对 AS 1.5 添加这些功能的标签。

    【讨论】:

    • 该链接显示,“源集的 java/resources 组件允许包含/排除模式。我们应该为aidl/rs/jni/assets 执行此操作。”听起来他们希望“java”排除当前正在工作。
    • @BrianWhite 感谢您的纠正。很高兴听到支持。
    • 不,不支持。至少,它对我不起作用。只是这个问题明确提到了aidl/rs/jni/assets 而不是java。
    • 当我看到jetbrains.com/idea/help/excluding-files-from-project.html 时,我非常兴奋,然后我意识到一个小小的注意This action is not applicable to Java files and binaries. 呸!
    【解决方案4】:

    我以前这样做的方式是,

    对于 Windows:右键单击 java 文件 -> 在资源管理器中显示 -> 将文件扩展名从“.java”更改为“.c”

    对于 Mac:右键单击 java 文件 -> 在 Finder 中显示 -> 将文件扩展名从 '.java' 更改为 '.c'

    就这么简单。

    【讨论】:

      【解决方案5】:

      将其移动到新文件夹。 右键单击 -> 在资源管理器中显示 -> 剪切然后粘贴到新文件夹(在任何项目之外)。 我只是在 AndroidStudioProjects 文件夹中创建了一个新文件夹并将它们放在那里。

      【讨论】:

      • 这是我能想象到的最丑陋的解决方案,但我最终做到了。 :-(
      • 如果您移动文件,那么所有连接的类和资源都将断开连接,这将产生另一个问题。不好。
      【解决方案6】:

      来自https://stackoverflow.com/a/69261642/3689782 的交叉发帖,但在这里重复似乎很有用。

      我遇到了一种方法,可以使用上面链接中的其他解决方案组合来专门针对 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)
      

      在我的特殊情况下,测试名称周围需要额外的通配符,因为发生了其他代(特别是带有 kapt 的 Dagger)。

      这似乎是一种有点笨拙的方法,但它的工作原理是确保将测试目标排除在它实际上可以排除的所有任务(包括构建和 kapt 任务)之外。 sourceSets 排除对于不被拾取进行编译的文件仍然是必要的(我认为这是 Kotlin Gradle 插件,但它也可能是 Android Gradle 插件——我在调试 Gradle 构建方面不够精通把它固定下来)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 2017-06-13
        • 2015-11-07
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多