拆解Gradle第二彈SourceSet

參考資料:帶你認識SourceSet

SourceSet是做什麼的?

SourceSets被稱作源代碼集合,一般可以用它來指定資源的路徑(項目下src),是Java插件用來描述和管理源代碼及資源的一個抽象概念,是一個Java源代碼文件和資源文件的集合,我們可以通過sourceSets更改源集的Java目錄或者資源目錄等。
寫在前面:gradle中有兩個sourceSet,一個是android.sourceSet{},另一個是sourceSet{},前者是android插件的sourceSet,後者是Java插件的sourceSet,官方文檔中說明的是java插件的sourceSet,Android的只能看源碼,兩者有一些不同本文只做歸納,詳細參考第一行的參考資料。

java插件引入了一個概念叫做SourceSets,通過修改SourceSets中的屬性,可以指定哪些源文件(或文件夾下的源文件)要被編譯,哪些源文件要被排除。Gradle就是通過它實現Java項目的佈局定義。
SourceSets目錄結構是固定的Java的標準項目目錄佈局,SourceSet是project的一個屬性,但是需要注意gradle中的SourceSets首字母小寫,不然會報錯。

java.sourceSet如何使用?

sourceSets {
    main {
        println "name:"+getName() //name:main 同m_java.name
        SourceSet m_java = java {
            println "name:"+getName() //name:java
        }
        SourceDirectorySet set = getJava()
        println "my_java:"+m_java.name +" size:"+set.size() //my_java:main size:1
    }
    println "my_java:"+m_java.name  //my_java:m_java
}

android.sourceSet如何使用?

android{
	sourceSets {
	      main {
	      	println java.name //main Java source
            //在sourceSets中配置指定的Manifest文件(例如在組件化開發中, 我們需要針對debug與release模式下, 指定不同的Manifest文件)
            if (isDebug.toBoolean()) {
                  manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                  manifest.srcFile 'src/main/release/AndroidManifest.xml'
            }
	        //指定其他編譯目錄
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']	            
	
           java {
                  // 指定源碼目錄
                  srcDir 'src/java' 
                  //加一些不按照java標準的文件夾結構下的java文件(注意不是替換)
                  srcDir 'src/myJavaPath'
                  //合併
                  sourceSets.all{set ->println "${set.name}的文件是 ${set.java.srcDirs}" }
                  //排除,打包時不包含文件的路徑
                  exclude '/test/**' 
                  println "name:"+getName() //name:main Java source
            }
            resources {
                  //指定資源目錄
                  srcDir 'src/resources'
                  //排除,打包時不包含文件的路徑
                  exclude '/resource/**' 
                  println "name:"+getName() //name:main Java resources
            }
            assets {
                println "name:"+getName() //name:main assets
            }
            //
             Set<File> files = java.sourceFiles.getFiles();
            for (File mfile:files){
                println "文件名:"+mfile.name
            }
	      }
	}
}

在這裏插入圖片描述

SourceSet如何輸出

點擊build菜單,make/rebuild都可以
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章