gpt4 book ai didi

android - Android Studio Gradle sourceSets复制

转载 作者:行者123 更新时间:2023-12-03 04:35:23 24 4
gpt4 key购买 nike

Android Studio 2.0 Preview 2,Gradle Wrapper 2.8,Mac OS X

-MainProjectWorkspace    
-|-build.gradle
-|-settings.gradle
-|-gradle.properties
-|-gradle
-|-MyLibraryDependencies
-|-MyMainModule
--|-build.gradle
--|-build
--|-src
---|-androidTest
---|-main
----|-assets
----|-jniLibs
----|-libs
----|-java
-----|-com
----|-res
----|-AndroidManifest.xml

MyMainModule/build.gradle

//Not a single SourceSets configurations.

productFlavors {
flavor1 {
}
flavor2 {
}
}

buildTypes {
release {
}
debug {
}
}

一位天才的开发人员在“src / main / java”中的数百个Java源文件中保留了System.out.println语句,而不是Log语句。理想情况下,我们不希望Sysout语句与任何applicationVariants bundle 在一起,尤其是flavor1Release和flavor2Release。

在对这数百个Java源文件进行修改并最终将Sysout语句切换为Log语句之前,我们需要紧急将其关闭。

两种可能的解决方案-
  • 执行一个简单的脚本,该脚本将删除“src / main / java”中Java源文件中的所有Sysout语句。但与此有关的是,variant1Debug和flavor2Debug的变体需要记录器显示应用程序中正在发生的事情。
  • 在构建时执行一个简单的Gradle任务,将Java源文件从“src / main / java”复制到“src / release / java”,确保省略Sysout语句。

  • 解决方案2似乎是最快,最简单,最优雅的。特别是当Gradle自定义任务独立执行时。除此之外,Android-Studio中的Gradle-sync似乎正在复制从“src / main”到“src / release”的所有内容,包括 Assets ,jniLibs,libs,res甚至AndroidManifest.xml。幸运的是,Java源文件被剥离了“src / release”中的Sysout语句,这是预期的结果,理想情况下,仅应保留“src / release / java”而没有任何其他文件夹。
    task prepareRelease(type: Task) {
    Pattern sysoutRegex = Pattern.compile(<Sysout-Pattern>)
    try {
    File releaseFolder = file("src/release")
    File mainFolder = file("src/main")
    ByteArrayOutputStream output = new ByteArrayOutputStream()
    exec {
    commandLine = "sh"
    args = ["-c", "find ${mainFolder.canonicalPath} -name '*' -type f -print ",
    "| xargs egrep -l '${sysoutRegex.pattern()}'"]
    standardOutput = output
    }
    def fileList = output.toString().split(System.getProperty("line.separator"))
    fileList.each { line ->
    File srcFile = file(line)
    File destFile = file(srcFile.canonicalPath.replace("main", "release"))

    def content = srcFile.readLines()
    if (!destFile.exists()) {
    destFile.parentFile.mkdirs()
    destFile.createNewFile()
    destFile.writable = true
    }
    destFile.withWriter { out ->
    content.eachWithIndex { contentLine, index ->
    if (!sysoutRegex.matcher(contentLine).find()) {
    out.println contentLine
    }
    }
    }
    } catch (Exception fail) {
    throw fail
    }
    }

    自定义Gradle任务中没有任何内容可能会导致使“src / release”成为“src / main”的精确副本的错误,而这并非原本的意图。

    防止此默认副本从“src / main”到“src / release”的任何指针都将受到赞赏。

    最佳答案

    基于RaGe的评论-“如何将* .java用作查找模式而不是*?”

    荣誉我不应该在'|'之前打破“find | xargs egrep”在exec任务的args []中分为两个单独的args。确实,天才!!!

    关于android - Android Studio Gradle sourceSets复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34231967/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com