Gradle获取源码sourceSets
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle获取源码sourceSets相关的知识,希望对你有一定的参考价值。
参考技术A在写gradle插件时可能会使用到源码文件,如作源码文件的版本对比,源码分析等,但源码如何来获取呢?一般gradle项目的源码默认都是在固定的位置,如project/app/src/main/java 。但源码的位置并非一定要在此,这只是一个 默认位置 ,在Gradle的配置文件build.gradle里是可以配置源码的位置的,下面可以看下在android和Java项目中是如何配置的。
Android源码配置是在android下面的sourceSets参数里进行配置。
Java项目sourceSets与Android项目的不同,它在最外层直接配置。
我们知道在gradle的配置文件中,每个名称都是一个Extension,每个Extension可以配置指定的参数列表。如android,是由AppPlugin通过project.getExtensions().create("android",AppExtension)来创建的,而AppExtension类的成员变量定义了gradle参数,如defaultConfig,productFlavors,buildTypes,signingConfigs等。然而事实并非如何,gradle里还有一种配置自定义参数的方式,即Convention。Convention方式中每个成员变量对应的是一个extension。其中Java项目中的sourceSets即是使用如何方式进行配置的。
下面看一下如何获取获取项目的源码。既然源码是通过自定义参数配置的,那么获取的时候通过拿到自定义的参数对象,获取其sourceSets字段即可。
android使用的是BaseExension对象配置的参数,所有通过Plugin获取到extension对象,取其中的sourceSets字段。
Java项目是通过Convention配置的,所以需要找到Convention对象,即JavaPluginConvention。通过此对象来获取Java项目的源码文件
注意Java项目创建了Jar任务用来打包,而Jar也有一个getSource方法,此方法获取的并不是源码文件,而是编译过的class文件。
Android Gradle 插件AndroidSourceSets 配置 ② ( BaseExtension#sourceSets 配置 | AndroidSourceSets 配置简介 )
文章目录
Android Plugin DSL Reference 参考文档 :
-
BaseExtension 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.BaseExtension.html
-
AppExtension ( build.gradle#android 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.AppExtension.html
-
build.gradle#android 模块配置文档 : android-gradle-dsl/2.3/com.android.build.gradle.AppExtension.html
-
ProductFlavor ( build.gradle#android#defaultConfig 配置 ) 文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html
-
ProductFlavor#externalNativeBuild 配置 ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) : com.android.build.gradle.internal.dsl.ProductFlavor:externalNativeBuild
-
ExternalNativeBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.ExternalNativeBuildOptions.html
-
NdkBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild#ndkBuild 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.NdkBuildOptions.html
-
CmakeOptions ( build.gradle#android#defaultConfig#externalNativeBuild#cmake 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.CmakeOptions.html
-
JackOptions ( build.gradle#android#defaultConfig#jackOptions 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.JackOptions.html
-
AnnotationProcessorOptions ( 注解处理器配置 ) ( build.gradle#android#defaultConfig#javaCompileOptions配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AnnotationProcessorOptions.html
-
NdkOptions ( build.gradle#android#defaultConfig#ndk 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.NdkOptions.html
-
VectorDrawablesOptions ( build.gradle#android#defaultConfig#vectorDrawables 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html
-
BuildType ( build.gradle#android#buildTypes 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.BuildType.html
-
SigningConfig ( build.gradle#android#signingConfigs 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.SigningConfig.html
-
AaptOptions ( build.gradle#android#aaptOptions 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AaptOptions.html
-
AndroidSourceSets ( build.gradle#android#sourceSets 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html
-
NDK 参考文档 : Add C and C++ Code to Your Project.
一、BaseExtension#sourceSets 配置
BaseExtension 文档 : android-gradle-dsl/2.3/com.android.build.gradle.BaseExtension.html
1、源集配置
在 BaseExtension 中 使用
sourceSets
脚本块 , 用于配置 源集 ;
NamedDomainObjectContainer<AndroidSourceSet> sourceSets
源集属性 , 源集是存放在 NamedDomainObjectContainer
容器中的 ;
AppExtension 继承了 BaseExtension , 因此在 " build.gradle # android " 模块中可以设置 sourceSets 源集列表 ;
2、sourceSets 脚本块原型
sourceSets 脚本块原型 :
sourceSets
Configures source sets.
Note that the Android plugin uses its own implementation of source sets, AndroidSourceSet.
Delegates to:
NamedDomainObjectContainer<AndroidSourceSet> from sourceSets
3、NamedDomainObjectContainer sourceSets 属性原型
NamedDomainObjectContainer<AndroidSourceSet> sourceSets 属性原型 :
NamedDomainObjectContainer<AndroidSourceSet> sourceSets
All source sets. Note that the Android plugin uses its own implementation of source sets, AndroidSourceSet.
二、AndroidSourceSets 配置简介
AndroidSourceSets ( build.gradle#android#sourceSets 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html
AndroidSourceSets 配置中的各个属性如下 , 都是 Android 工程中常见的目录属性 ;
aidl
The Android AIDL source directory for this source set.
此源集的Android AIDL源目录。
assets
The Android Assets directory for this source set.
此源集的Android资产目录。
compileConfigurationName
The name of the compile configuration for this source set.
此源集的编译配置的名称。
java
The Java source which is to be compiled by the Java compiler into the class output directory.
Java编译器将编译到类输出目录中的Java源代码。
jni
The Android JNI source directory for this source set.
此源集的Android JNI源目录。
jniLibs
The Android JNI libs directory for this source set.
此源集的Android JNI libs目录。
manifest
The Android Manifest file for this source set.
此源集的Android清单文件。
name
The name of this source set.
此源集的名称。
packageConfigurationName
The name of the runtime configuration for this source set.
此源集的运行时配置的名称。
providedConfigurationName
The name of the compiled-only configuration for this source set.
此源集的仅编译配置的名称。
renderscript
The Android RenderScript source directory for this source set.
此源集的Android RenderScript源目录。
res
The Android Resources directory for this source set.
此源集的Android资源目录。
resources
The Java resources which are to be copied into the javaResources output directory.
要复制到javaResources输出目录的Java资源。
以上是关于Gradle获取源码sourceSets的主要内容,如果未能解决你的问题,请参考以下文章