AppExtension类及其属性
可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候,经常看到它,它是什么呢?
如果你按ctrl+鼠标左键对着Android{},点击进去就知道了,其实android{…}表示的就是AppExtension这个类。
如图:
我们再来看看AppExtension继承关系:
除了AppExtension之外还有2个类与之相似,LibraryExtension和TestExtension
如果是module项目作为lib使用,那么lib下的build.gradle中的android对应的是LibraryExtension
AppExtension的属性
aaptOptions:aapt是一个可以将资源文件编译成二进制文件的工具。aaptOptions表示aapt工具设置的可选项参数。adbExecutable:adb从编译sdk时执行
adbOptions:adb的可选项参数applicationVariants:应用变体列表
==buildToolsVersion==:构建工具版本(必要的)
buildTypes:构建类型(一般是release和debug,还可以自定义)
compileOptions:编译可选项参数
==compileSdkVersion==:编译sdk版本(必要的)
dataBinding:Data Binding可选项参数(关于DataBinding的使用)
defualtConfig:默认配置,对于所有的打包项目defualtPublishConfig:默认是release。使用参考
dexOptions:Dex可选项参数。
externalNativeBuild:native编译支持。参考flavorDimensionList:generatePureSplits:是否拆成多个APK
jacoco:JaCoCo可选项参数
lintOptions:Lint工具可选项参数ndkDirectory:ndk目录(一般在local.properties中)
packagingOptions:packaging的可选参数
productFlavors:项目所有flavorpublishNonDefualt:不仅仅使用默认的publish artifacts。可参考defualtPublishConfig。resourcePrefix:创建新资源时使用的前缀。sdkDirectory:sdk目录(一般在local.properties中)
signingConfigs:签名文件的可选项参数
sourceSets:资源文件目录指定(Android中有自己的AndroidSourceSets,这个一般用于assets,jin等目录)
splits:splits类型。testBuildType:测试构建类型
testOptions:测试可选项参数testVariants:测试变体unitTestVariants:单元测试变体variantFilter:变体过滤器
加粗的表示DSL语言的闭包
如:
buildTypes { }
1
1
AppExtension的方法: - flavorDimensions(dimension):指定flavor名称 - useLibraray(name):请求使用一个lib库 - useLibrary(name,required):与上面解释一样。
AppExtension的配置闭包(Configration blocks)
与app中build.gradle中android{}一样,代码中由AppExtension类表示。其他的配置闭包也一样。
aaptOptions{}
aaptOptions{}代码由AaptOptions类表示。
AaptOptions的属性:
1.additionalParameters:额外参数,List类型。
2.cruncherEnabled:如果PNG图片是否可以大量快速的处理,
boolean类型。
true表示可以。
3.cruncherProcesses:快速处理,可能需要更多的内存和CPU。
int类型。默认
0,值越大处理越快,需要的内存和CPU也越大。
4.failOnMissingConfigEntry:如果没有找到一个配置,就返回一个错误。Boolean值,默认
false。
5.ignoreAssetsPattern:忽略Assets模块。
6.moCompress:拓展文件不会打包进apk中。
用法(详细用法可能需要去看看文档了):
aaptOptions{
cruncherEnabled
true
}
12345678910111213141516
12345678910111213141516
AaptOptions官方文档
adbOption{}
adbOptions{}对应的是
AdbOptions
AdbOptions的属性:
1
.installOptions:
apk安装的可选参数。
2
.timeOutInMs:使用
adb的超时时间。
不常用
12345678
12345678
buildTypes{}
buildTypes{}对应的是BuildType类
buildTypes的属性:
1.applicationIdSuffix:应用id后缀(给Applica)
2.consumerProguardFiles:混淆文件包含在arr包中。
3.debuggable:是否生成一个debug的apk
4.embedMicroApp:可穿戴设备app是否可以使用这个编译类型
5.javaCompileOption:Java编译配置参数
6.jniDebuggable:这个编译类型的配置是否可以与debuggable的native代码生成一个apk
7.manifestPlaceholders:清单占位符
8.minifyEnabled:是否缩小
9.multiDexEnabled:是否拆成多个Dex
10.multiDexKeepFile:指定文本文件编译进主Dex文件中
11.multiDexKeepProguard:指定混淆文件编译进主Dex文件中
12.name:build type的名字
13.proguardFiles:混淆文件
14.pseudoLocalesEnabled:是否生成伪现场apk(如果没有提供混淆规则文件,则设置默认的混淆规则文件(SDK/tools/proguard/proguard-android.txt))
15.renderscriptDebuggable:使用RenderScript编译器的优化级别。
16.shrinkResources:是否去除未利用的资源,默认false,表示不去除。
17.signingConfig:签名配置
18.testCoverageEnabled:测试覆盖率是否被激活。
19.useJack:过时
20.versionNameSuffix:版本名称后缀
21.zipAlignEnable:是否使用zipalign工具压缩。
------------------------------------------------------
buildType的方法:
1.buildConfigField(type,name,value):添加一个变量生成BuildConfig类。
2.consumeProguardFile(proguardFile):添加一个混淆文件进arr包。
3.consumeProguardFile(proguardFiles):添加混淆文件进arr包。
4.externalNativeBuild(action):配置本地的build选项。
5.initWith:复制这个build类型的所有属性。
6.proguardFile(proguardFile):添加一个新的混淆配置文件。
7.proguradFiles(files):添加新的混淆文件
8.resValue(type,name,value):添加一个新的生成资源
9.setProguardFiles(proguardFileIterable):设置一个混淆配置文件。
------------------------------------------------------------
buildType用法:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android.txt'),
'proguard-rules.pro'
shrinkResources true
zipAlignEnabled true
debuggable false
//
...
}
debug{
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android.txt'),
'proguard-rules.pro'
shrinkResources true
zipAlignEnabled true
debuggable true
//
...
}
}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
BuildType官方文档
compileOptions{}
compileOptions{}对应的是
CompileOptions
CompileOptions的属性:
1.encoding:
Java源文件的编码格式
2.incremental:是否应该使用
Java编写的
Gradle新的增量模型
3.sourceCompatibility:指定编译编译.java文件的jdk版本
4.targetCompatibility:确保
class文件与targetCompatibility指定版本,或者更新的java虚拟机兼容
不太常用
123456789101112
123456789101112
dataBinding{}
dataBinding{}对应的是
DataBindingOptions
DataBindingOptions的属性:
1.addDefualtAdapters:是否添加一个默认的
data binding适配器。默认true。
2.enabled:是否使用
data binding
3.version:
data binding使用版本
dataBinding的使用:
dataBinding{
enabled true
}
123456789101112131415
123456789101112131415
关于DataBinding的详细用法
defualtConfig{}
defaultConfig{}是所有flavor都共有的配置。
英文解释:
The default configuration, inherited by all product flavors (if any are defined).
defaultConfig的使用:
defaultConfig {
applicationId
"com.example.zhang.demo"
minSdkVersion
15
targetSdkVersion
25
versionCode
1
versionName
"1.0"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
}
12345678910111213141516
12345678910111213141516
如果项目中包含多个Module,可以将共有的minSdkVersion和targetSdkVersion抽取到Project中的build.gradle文件中。具体细节下一章节。
dexOptions{}
dexOptions
{}对应的是DexOptions
DexOptions属性:
1.additionalParameters:给dx添加一系列附加的参数
2.javaMaxHeapSize:当调用dx时指定-Xmx值。
3.jumboMode:使用jumbo(庞大的)模式
4.keepRuntimeAnnotatedClasses:保持所有类中的运行时的注解在主Dex中。
5.maxProcessCount:可以使用Dex的最大并发进程数。默认为
4。
6.optimize:运行在dx编译器是否有optimize标记。
7.preDexLibraries:是否预先dex库,它可以改善增量的生成,但是在clear build可能会变慢
8.threadCount:当dx运行时使用的线程的数量。默认
4个。
dexOptions
{}的用法:
dexOptions
{
preDexLibraries false
javaMaxHeapSize "4g"
}
123456789101112131415161718192021
123456789101112131415161718192021
externalNativeBuild{}
externalNativeBuild{}对应的是ExternalNativeBuild
ExternalNativeBuild的属性:
1.cmake:CMake工具编译选项。
2.ndkBuild:ndk-build选项。
在externalNativeBuild{}中有2个模块,cmake{}和ndkBuild{}模块
------------------------------------------------
cmake{}对应的是CmakeOptions
CmakeOption的属性:
1.path:你的CmakeLists.txt编译脚本的相对路径。
--------------------------------------------------
ndkBuild{}对应的是NdkBuildOptions
NdkBuildOptions的属性:
1.path:你的Android.mk文件的相对路径。
--------------------------------------------------
externalNativeBuild{}的用法:
externalNativeBuild{
ndkBuild{
path file("src\\main\\jni\\Android.mk")
}
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
12345678910111213141516171819202122232425262728293031323334353637
12345678910111213141516171819202122232425262728293031323334353637
Android Studio2.2 配置NDK
Android studio 2.2 使用cmake编译NDK
jacoco{}
jacoco{}对应于JacocoOptions
JacocoOptions的属性:
1.version:过时
英文原文:
note: this
property is deprecated
and will be removed
in a future
version of the plugin.
12345678
12345678
lintOptions{}
lintOptions{}对应于LintOptions
LintOptions的属性:
1.abortOnError:如果发现错误,lint工具是否应该退出这个程序。
true表示退出。
2.absolutePaths:是否在输出错误的时候,lint应该展示出全路径。默认是相对路径,也就是默认
false。
3.check:精确的检查(搜集)问题的集合,默认情况下,任何问题都可以通过LintOptions.getEnable()启用,没有问题可以通过LintOptions.getDisable()使之无效。
4.checkAllWarnings:是否检查所有警告,包括那些默认关闭。
5.disable:通过
id's来压制这个问题,允许修改
6.enable:通过
id's来处理这个问题,循序修改,他会将添加
id,并返回一个集合。
7.explainIssues:返回lint是否包含错误问题的解释(注意:HTML和XML报告会无条件的去做,忽略这个设置)。
8.htmlOutput:html输出方式。
9.htmlReport:我们应该是否写一个HTML报告,默认
true, 这个使用场景由LintOptions.getHtmlOutput()控制。
10.ignoreWarings:lint仅仅检查错误,忽略警告。
11.lintConfig:默认配置文件作为备份。
12.noLines:lint在输出错误日志的时候,是否包含行数。默认
true。
13.quiet:lint是否应该quiet(安静)。如:报告文件写入路径,不写消息。
14.severityOverrides:An optional map
of severity overrides. The map maps
from issue
id's
to the corresponding severity
to use, which must be
"fatal",
"error",
"warning",
or "ignore".
15.showAll:lint是否包含所有的输出。
16.textOutput:文本输出方式。
17.textReport:是否是文本报告写入,默认
false。
18.warningAsErrors:lint是否把警告当做错误来处理。
19.xmlOutput:XML输出方式。
20.xmlReport:XML格式写入报告,默认
true。
LintOptions的方法:
1.check(
id):检查这个
id的问题的集合
2.check(ids):
3.disable(
id):将
id添加到不用启动的问题集
4.disable(ids):
5.enable(
id):将
id添加到启动的问题集
6.enable(ids)
7.error(
id):将
id添加到错误的问题集
8.error(ids)
9.fatal(
id):将
id添加到fatal级别的问题集
10.fatal(ids)
11.ignore(
id):将
id添加到ignore级别的问题集
12.ignore(ids)
13.waring(
id):将
id添加到waring级别的问题集
14.waring(ids)
lintOptions{}的一般用法:
lintOptions {
abortOnError
false
}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
LintOptions官方文档
packagingOptions{}
packagingOptions{}对应的是
PackagingOptions
Packaging options有三组路径:first-picks,merges和excludes:
packagingOptions{}的用法:
packagingOptions {
pickFirsts = [] //
Not really needed because the
default is empty.
merges = [] //
Not really needed because the
default is empty.
excludes = []
}
12345678910111213
12345678910111213
PackagingOptions官方文档
productFlavors{}
manifestPlaceholders:设置打包渠道)productFlavors.all { //平台id flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849501234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950" data-snippet-id="ext.b1a48a92cb402df9f2399a3f023caa45" data-snippet-saved="false" data-codota-status="done" style="white-space: nowrap; word-wrap: break-word; box-sizing: border-box; position: relative; overflow-y: hidden; overflow-x: auto; margin-top: 0px; margin-bottom: 1.1em; font-family: "Source Code Pro", monospace; padding: 5px 5px 5px 60px; font-size: 14px; line-height: 1.45; word-break: break-all; color: rgb(51, 51, 51); background-color: rgba(128, 128, 128, 0.0470588); border: 0px solid rgb(136, 136, 136); border-radius: 0px;">productFlavors{}对应的是ProductFlavors
ProductFlavors的属性:
1.applicationId:应用程序ID。
2.applicationIdSuffix:应用程序ID后缀。
3.consumerProguardFiles:混淆规则文件被包含在aar包中。
4.dimension:flavor名称的尺寸。
5.externalNativeBuild:详情见externalNativeBuild{}
6.flavorDeminsion:过时
7.generatedDensities:过时
8.jackOption:jack配置可选项。
9.javaCompileOptions:Java编译配置参数
10.manifestPlaceholders:manifest占位符
11.multiDexEnabled:是否进行dex拆分
12.multiDexKeepFile:文本文件编译进主dex文件中。
13.multiDexKeepProgroud:文本文件作为混淆规则编译进主dex文件中
14.ndk:ndk配置
15.proguardFiles:混淆文件
16.signingConfig:这个flavor的签名配置信息
17.testApplicationId:测试应用ID
18.testFunctionalTest:
19.testHandleProfiling:
20.testInstrumentationRunner:
21.testInstrumentionRunnerArguments:
22.useJack:过时
23.verctorDrawables:生成矢量图支持
24.versionCode:版本号
25.versionName:版本名
26.versionNameSuffix:版本名后缀
27.wearAppUnbundled:是否对嵌入式穿戴app进行拆分模式。如果
true,那么这个app将在应用市场被分发为穿戴设备的app。
productFlavor{}的用法:
productFlavors {
googlePlay {
}
xiaomi {
}
}
productFlavors
.all {
flavor
-> flavor
.manifestPlaceholders
= [UMENG_CHANNEL_VALUE: name
]
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
ProductFlavor官方文档
signingConfig{}
signingConfig
{}对应的是SigningConfig
SigningConfig的属性:
1.keyAlias:签名使用key的别名
2.KeyPassword:签名使用的key的密码
3.storeFile:store签名文件
4.storePassword:store签名密码
5.storeType:store签名类型
6.v1SigningEnabled:是否使用jar签名(又名v1签名)。
7.v2SigningEnabled:是否使用apk签名(又名v2签名)。
signingConfig
{}的用法:
signingConfigs
{
config {
keyAlias '...'
keyPassword '...'
storeFile file('C:/../Key.jks')
storePassword '...'
}
}
123456789101112131415161718192021222324
123456789101112131415161718192021222324
sourceSets{}
sourceSets{}对应的AndroidSourceSet
AndroidSourceSet的属性:
1.aidl:aidl目录
2.assets:assets目录
3.compileConfiguraName:编译配置资源目录。
4.java:java代码目录(需要编译成.
class文件)
5.jni:jni资源目录
6.jniLibs:jni库目录
7.manifest:AndroidManifest.xml资源文件
8.name:source
set名称。
9.packageConfigurationName:运行时配置的资源集。
10.providedConfigurationName:仅仅编译时配置的资源集。
11.renderscript:RenderScript脚本资源目录
12.res:Android资源目录
13.resource:java资源被复制到输出到javaresource目录
AndroidSourceSet的方法:
1.setRoot(path):资源集的根目录,所有的资源都在这个跟目录下。
sourceSets{}的使用:
sourceSets {
main {
assets.srcDirs = [
'assets']
jni.srcDirs
'src/main/jni'
jniLibs.srcDir
'src/main/jniLibs'
}
}
12345678910111213141516171819202122232425262728293031323334353637
12345678910111213141516171819202122232425262728293031323334353637
splits{}
splits{}对应的是Splites
Splits的属性:
1.abi:ABI设置
2.abiFilters:用于多个apk的ABI筛选列表
3.density:密度设置
4.densityFilters:用于多个apk的密度筛选列表
5.language:语言设置。
6.languageFilters:用于多个apk的语言筛选列表
Spiltes对应有三个模块,abi{},density{},language{}
abi{}对应的是AbiSplitOptions
AbiSplitsOptions的属性:
1.applicableFilters:返回此范围的所有适用筛选器的列表。
2.enable:是否在这个范围分裂
3.universalApk:是否创建所有可用的ABIs一个APK。
AbiSplitesOptions的方法:
1.exclude(excludes):排除一些值。
2.include(
include):包含一些值。
3.reset():重新设置
split配置。
density{}对应的是DensitySplitOptions
DensitySplitOptions的属性:
1.applicableFilters:返回此范围的所有适用筛选器的列表。
2.auto:编译系统是否确定分割“language-*”文件夹中的资源。
3.compatibleScreen:兼容屏幕列表
4.enable:是否拆分
DensitySplitOptions的方法:
1.exclude(exclude):排除一些值
2.include(
include):包含一些值
3.reset():重新设置
split配置。
language{}对应的是LanguageSplitOptions
LanguageSplitOptions的属性:
1.enable:如果
true,就是拆分language
LanguageSplitOptions的方法:
1.include(
include):包含一个模型。
splits{}的用法:
splits {
density {
enable
true
exclude
'ldpi',
'mdpi'
compatibleScreens
'normal',
'large',
'xlarge'
}
}
生成结果:
app-hdpi-release.apk
app-universal-release.apk
app-xhdpi-release.apk
app-xxhdpi-release.apk
app-xxxhdpi-release.apk
splits {
abi {
enable
true
reset()
include 'x86',
'armeabi-v7a',
'mips'
universalApk
true
}
}
这个就是生成不同手机架构的app
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
APK-splite官方文档
Splite官方文档
参考文章
testOptions{}
testOptions{}对应的是TestOptions
TestOptions的属性:
1.reportDir:报告目录
2.resultDir:结果目录
3.unitTests:单元测试配置参数
TestOptions包含unitTests{}
-------------------------------------------------------
unitTests{}对应的是UnitTestOptions
UnitTestOptions的属性:
1.returnDefaultValues:无论unmocked方法从android.jar中抛出异常或是默认值(0或null)。
UnitTestOtions的方法:
all(configClosure):配置所有单元测试任务。
-------------------------------------------------
testOptions{}的使用:
testOptions {
resultsDir = "$project.buildDir/foo/results"
}
1234567891011121314151617181920212223242526272829
1234567891011121314151617181920212223242526272829
参考文档
AppExtension文档
Gradle翻译