当前位置:   article > 正文

Android Studio gradle配置详解_build configuration language

build configuration language

什么是AppExtension

其实就是一个对gradle配置android项目的一个拓展,对于android studio build.gradle 配置如下的属于AppExtension

apply plugin: 'com.android.application'

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:项目所有flavor
  •     publishNonDefualt:不仅仅使用默认的publish artifacts。可参考defualtPublishConfig。
  •     resourcePrefix:创建新资源时使用的前缀。
  •     sdkDirectory:sdk目录(一般在local.properties中)
  •     signingConfigs:签名文件的可选项参数
  •     sourceSets:资源文件目录指定(Android中有自己的AndroidSourceSets,这个一般用于assets,jin等目录)
  •     splits:splits类型。
  •     testBuildType:测试构建类型
  •     testOptions:测试可选项参数
  •     testVariants:测试变体
  •     unitTestVariants:单元测试变体
  •     variantFilter:变体过滤器

加粗的表示DSL语言的闭包

如:

buildTypes { }

AppExtension的方法
- flavorDimensions(dimension):指定flavor名称
- useLibraray(name):请求使用一个lib库
- useLibrary(name,required):与上面解释一样。

AppExtension的配置闭包(Configration blocks)

与app中build.gradle中android{}一样,代码中由AppExtension类表示。其他的配置闭包也一样。

  • aaptOptions{}
  1. aaptOptions{}代码由AaptOptions类表示。
  2. AaptOptions的属性:
  3. 1.additionalParameters:额外参数,List类型。
  4. 2.cruncherEnabled:如果PNG图片是否可以大量快速的处理,boolean类型。 true表示可以。
  5. 3.cruncherProcesses:快速处理,可能需要更多的内存和CPU。int类型。默认0,值越大处理越快,需要的内存和CPU也越大。
  6. 4.failOnMissingConfigEntry:如果没有找到一个配置,就返回一个错误。Boolean值,默认false
  7. 5.ignoreAssetsPattern:忽略Assets模块。
  8. 6.moCompress:拓展文件不会打包进apk中。
  9. 用法(详细用法可能需要去看看文档了):
  10. aaptOptions{
  11. cruncherEnabled true//快速处理PNG图片
  12. }

 AaptOptions官方文档

  • adbOption{}
  1. adbOptions{}对应的是AdbOptions
  2. AdbOptions的属性:
  3. 1.installOptions:apk安装的可选参数。
  4. 2.timeOutInMs:使用adb的超时时间。
  5. 不常用
  • buildTypes{}
  1. buildTypes{}对应的是BuildType类
  2. buildTypes的属性:
  3. 1.applicationIdSuffix:应用id后缀(给Applica)
  4. 2.consumerProguardFiles:混淆文件包含在arr包中。
  5. 3.debuggable:是否生成一个debug的apk
  6. 4.embedMicroApp:可穿戴设备app是否可以使用这个编译类型
  7. 5.javaCompileOption:Java编译配置参数
  8. 6.jniDebuggable:这个编译类型的配置是否可以与debuggable的native代码生成一个apk
  9. 7.manifestPlaceholders:清单占位符
  10. 8.minifyEnabled:是否缩小
  11. 9.multiDexEnabled:是否拆成多个Dex
  12. 10.multiDexKeepFile:指定文本文件编译进主Dex文件中
  13. 11.multiDexKeepProguard:指定混淆文件编译进主Dex文件中
  14. 12.name:build type的名字
  15. 13.proguardFiles:混淆文件
  16. 14.pseudoLocalesEnabled:是否生成伪现场apk(如果没有提供混淆规则文件,则设置默认的混淆规则文件(SDK/tools/proguard/proguard-android.txt))
  17. 15.renderscriptDebuggable:使用RenderScript编译器的优化级别。
  18. 16.shrinkResources:是否去除未利用的资源,默认false,表示不去除。
  19. 17.signingConfig:签名配置
  20. 18.testCoverageEnabled:测试覆盖率是否被激活。
  21. 19.useJack:过时
  22. 20.versionNameSuffix:版本名称后缀
  23. 21.zipAlignEnable:是否使用zipalign工具压缩。
  24. ------------------------------------------------------
  25. buildType的方法:
  26. 1.buildConfigField(type,name,value):添加一个变量生成BuildConfig类。
  27. 2.consumeProguardFile(proguardFile):添加一个混淆文件进arr包。
  28. 3.consumeProguardFile(proguardFiles):添加混淆文件进arr包。
  29. 4.externalNativeBuild(action):配置本地的build选项。
  30. 5.initWith:复制这个build类型的所有属性。
  31. 6.proguardFile(proguardFile):添加一个新的混淆配置文件。
  32. 7.proguradFiles(files):添加新的混淆文件
  33. 8.resValue(type,name,value):添加一个新的生成资源
  34. 9.setProguardFiles(proguardFileIterable):设置一个混淆配置文件。
  35. ------------------------------------------------------------
  36. buildType用法:
  37. buildTypes {
  38. release {
  39. minifyEnabled true
  40. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  41. shrinkResources true
  42. zipAlignEnabled true
  43. debuggable false
  44. //...
  45. }
  46. debug{
  47. minifyEnabled true
  48. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  49. shrinkResources true
  50. zipAlignEnabled true
  51. debuggable true
  52. //...
  53. }
  54. }

BuildType官方文档

  • compileOptions{}
  1. compileOptions{}对应的是CompileOptions
  2. CompileOptions的属性:
  3. 1.encoding:Java源文件的编码格式
  4. 2.incremental:是否应该使用Java编写的Gradle新的增量模型
  5. 3.sourceCompatibility:指定编译编译.java文件的jdk版本
  6. 4.targetCompatibility:确保class文件与targetCompatibility指定版本,或者更新的java虚拟机兼容
  7. 不太常用
  • dataBinding{}
  1. dataBinding{}对应的是DataBindingOptions
  2. DataBindingOptions的属性:
  3. 1.addDefualtAdapters:是否添加一个默认的data binding适配器。默认true
  4. 2.enabled:是否使用data binding
  5. 3.version:data binding使用版本
  6. dataBinding的使用:
  7. dataBinding{
  8. enabled true
  9. }

关于DataBinding的详细用法

  • defualtConfig{}
  1. defaultConfig{}是所有flavor都共有的配置。
  2. 英文解释:The default configuration, inherited by all product flavors (if any are defined).
  3. defaultConfig的使用:
  4. defaultConfig {
  5. applicationId "com.example.zhang.demo"
  6. minSdkVersion 15
  7. targetSdkVersion 25
  8. versionCode 1
  9. versionName "1.0"
  10. testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  11. }

如果项目中包含多个Module,可以将共有的minSdkVersion和targetSdkVersion抽取到Project中的build.gradle文件中。

  • dexOptions{}
  1. dexOptions{}对应的是DexOptions
  2. DexOptions属性:
  3. 1.additionalParameters:给dx添加一系列附加的参数
  4. 2.javaMaxHeapSize:当调用dx时指定-Xmx值。
  5. 3.jumboMode:使用jumbo(庞大的)模式
  6. 4.keepRuntimeAnnotatedClasses:保持所有类中的运行时的注解在主Dex中。
  7. 5.maxProcessCount:可以使用Dex的最大并发进程数。默认为4
  8. 6.optimize:运行在dx编译器是否有optimize标记。
  9. 7.preDexLibraries:是否预先dex库,它可以改善增量的生成,但是在clear build可能会变慢
  10. 8.threadCount:当dx运行时使用的线程的数量。默认4个。
  11. dexOptions{}的用法:
  12. dexOptions {
  13. preDexLibraries false
  14. javaMaxHeapSize "4g"
  15. }
  • externalNativeBuild{}
  1. externalNativeBuild{}对应的是ExternalNativeBuild
  2. ExternalNativeBuild的属性:
  3. 1.cmake:CMake工具编译选项。
  4. 2.ndkBuild:ndk-build选项。
  5. 在externalNativeBuild{}中有2个模块,cmake{}和ndkBuild{}模块
  6. ------------------------------------------------
  7. cmake{}对应的是CmakeOptions
  8. CmakeOption的属性:
  9. 1.path:你的CmakeLists.txt编译脚本的相对路径。
  10. --------------------------------------------------
  11. ndkBuild{}对应的是NdkBuildOptions
  12. NdkBuildOptions的属性:
  13. 1.path:你的Android.mk文件的相对路径。
  14. --------------------------------------------------
  15. externalNativeBuild{}的用法:
  16. externalNativeBuild{
  17. ndkBuild{
  18. path file("src\\main\\jni\\Android.mk")
  19. }
  20. cmake {
  21. path "src/main/cpp/CMakeLists.txt"
  22. }
  23. }

Android Studio2.2 配置NDK

Android studio 2.2 使用cmake编译NDK

  • jacoco{}
  1. jacoco{}对应于JacocoOptions
  2. JacocoOptions的属性:
  3. 1.version:过时
  4. 英文原文:
  5. note: this property is deprecated and will be removed in a future version of the plugin.
  • lintOptions{}
  1. lintOptions{}对应于LintOptions
  2. LintOptions的属性:
  3. 1.abortOnError:如果发现错误,lint工具是否应该退出这个程序。true表示退出。
  4. 2.absolutePaths:是否在输出错误的时候,lint应该展示出全路径。默认是相对路径,也就是默认false
  5. 3.check:精确的检查(搜集)问题的集合,默认情况下,任何问题都可以通过LintOptions.getEnable()启用,没有问题可以通过LintOptions.getDisable()使之无效。
  6. 4.checkAllWarnings:是否检查所有警告,包括那些默认关闭。
  7. 5.disable:通过id's来压制这个问题,允许修改
  8. 6.enable:通过id's来处理这个问题,循序修改,他会将添加id,并返回一个集合。
  9. 7.explainIssues:返回lint是否包含错误问题的解释(注意:HTML和XML报告会无条件的去做,忽略这个设置)。
  10. 8.htmlOutput:html输出方式。
  11. 9.htmlReport:我们应该是否写一个HTML报告,默认true, 这个使用场景由LintOptions.getHtmlOutput()控制。
  12. 10.ignoreWarings:lint仅仅检查错误,忽略警告。
  13. 11.lintConfig:默认配置文件作为备份。
  14. 12.noLines:lint在输出错误日志的时候,是否包含行数。默认true
  15. 13.quiet:lint是否应该quiet(安静)。如:报告文件写入路径,不写消息。
  16. 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".
  17. 15.showAll:lint是否包含所有的输出。
  18. 16.textOutput:文本输出方式。
  19. 17.textReport:是否是文本报告写入,默认false。
  20. 18.warningAsErrors:lint是否把警告当做错误来处理。
  21. 19.xmlOutput:XML输出方式。
  22. 20.xmlReport:XML格式写入报告,默认true。
  23. ------------------------------------------------
  24. LintOptions的方法:
  25. 1.check(id):检查这个id的问题的集合
  26. 2.check(ids):
  27. 3.disable(id):将id添加到不用启动的问题集
  28. 4.disable(ids):
  29. 5.enable(id):将id添加到启动的问题集
  30. 6.enable(ids)
  31. 7.error(id):将id添加到错误的问题集
  32. 8.error(ids)
  33. 9.fatal(id):将id添加到fatal级别的问题集
  34. 10.fatal(ids)
  35. 11.ignore(id):将id添加到ignore级别的问题集
  36. 12.ignore(ids)
  37. 13.waring(id):将id添加到waring级别的问题集
  38. 14.waring(ids)
  39. ------------------------------------------------
  40. lintOptions{}的一般用法:
  41. lintOptions {
  42. abortOnError false
  43. }

LintOptions官方文档

  • packagingOptions{}
  1. packagingOptions{}对应的是PackagingOptions
  2. Packaging options有三组路径:first-picks,merges和excludes:
  3. packagingOptions{}的用法:
  4. packagingOptions {
  5. pickFirsts = [] // Not really needed because the default is empty.
  6. merges = [] // Not really needed because the default is empty.
  7. excludes = []
  8. }

PackagingOptions官方文档

  • productFlavors{}
  1. productFlavors{}对应的是ProductFlavors
  2. ProductFlavors的属性:
  3. 1.applicationId:应用程序ID。
  4. 2.applicationIdSuffix:应用程序ID后缀。
  5. 3.consumerProguardFiles:混淆规则文件被包含在aar包中。
  6. 4.dimension:flavor名称的尺寸。
  7. 5.externalNativeBuild:详情见externalNativeBuild{}
  8. 6.flavorDeminsion:过时
  9. 7.generatedDensities:过时
  10. 8.jackOption:jack配置可选项。
  11. 9.javaCompileOptions:Java编译配置参数
  12. 10.manifestPlaceholders:manifest占位符
  13. 11.multiDexEnabled:是否进行dex拆分
  14. 12.multiDexKeepFile:文本文件编译进主dex文件中。
  15. 13.multiDexKeepProgroud:文本文件作为混淆规则编译进主dex文件中
  16. 14.ndk:ndk配置
  17. 15.proguardFiles:混淆文件
  18. 16.signingConfig:这个flavor的签名配置信息
  19. 17.testApplicationId:测试应用ID
  20. 18.testFunctionalTest:
  21. 19.testHandleProfiling:
  22. 20.testInstrumentationRunner:
  23. 21.testInstrumentionRunnerArguments:
  24. 22.useJack:过时
  25. 23.verctorDrawables:生成矢量图支持
  26. 24.versionCode:版本号
  27. 25.versionName:版本名
  28. 26.versionNameSuffix:版本名后缀
  29. 27.wearAppUnbundled:是否对嵌入式穿戴app进行拆分模式。如果true,那么这个app将在应用市场被分发为穿戴设备的app。
  30. productFlavor{}的用法:
  31. productFlavors {
  32. googlePlay {
  33. }
  34. xiaomi {
  35. }
  36. }
  37. //所有打包配置(批量处理打包渠道--> manifestPlaceholders:设置打包渠道)
  38. productFlavors.all {
  39. //平台id
  40. flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  41. }

ProductFlavor官方文档

  • signingConfig{}
  1. signingConfig{}对应的是SigningConfig
  2. SigningConfig的属性:
  3. 1.keyAlias:签名使用key的别名
  4. 2.KeyPassword:签名使用的key的密码
  5. 3.storeFile:store签名文件
  6. 4.storePassword:store签名密码
  7. 5.storeType:store签名类型
  8. 6.v1SigningEnabled:是否使用jar签名(又名v1签名)。
  9. 7.v2SigningEnabled:是否使用apk签名(又名v2签名)。
  10. signingConfig{}的用法:
  11. signingConfigs {
  12. config {
  13. keyAlias '...'
  14. keyPassword '...'
  15. storeFile file('C:/../Key.jks')
  16. storePassword '...'
  17. }
  18. }
  • sourceSets{}
  1. sourceSets{}对应的AndroidSourceSet
  2. AndroidSourceSet的属性:
  3. 1.aidl:aidl目录
  4. 2.assets:assets目录
  5. 3.compileConfiguraName:编译配置资源目录。
  6. 4.java:java代码目录(需要编译成.class文件)
  7. 5.jni:jni资源目录
  8. 6.jniLibs:jni库目录
  9. 7.manifest:AndroidManifest.xml资源文件
  10. 8.name:source set名称。
  11. 9.packageConfigurationName:运行时配置的资源集。
  12. 10.providedConfigurationName:仅仅编译时配置的资源集。
  13. 11.renderscript:RenderScript脚本资源目录
  14. 12.res:Android资源目录
  15. 13.resource:java资源被复制到输出到javaresource目录
  16. AndroidSourceSet的方法:
  17. 1.setRoot(path):资源集的根目录,所有的资源都在这个跟目录下。
  18. sourceSets{}的使用:
  19. sourceSets {
  20. //在main目录中
  21. main {
  22. //assets目录设置
  23. assets.srcDirs = ['assets']
  24. //jni目录设置
  25. jni.srcDirs 'src/main/jni'
  26. //jni库设置
  27. jniLibs.srcDir 'src/main/jniLibs'
  28. }
  29. }
  • splits{}
  1. splits{}对应的是Splites
  2. Splits的属性:
  3. 1.abi:ABI设置
  4. 2.abiFilters:用于多个apk的ABI筛选列表
  5. 3.density:密度设置
  6. 4.densityFilters:用于多个apk的密度筛选列表
  7. 5.language:语言设置。
  8. 6.languageFilters:用于多个apk的语言筛选列表
  9. -----------------------------------------------------
  10. Spiltes对应有三个模块,abi{},density{},language{}
  11. abi{}对应的是AbiSplitOptions
  12. AbiSplitsOptions的属性:
  13. 1.applicableFilters:返回此范围的所有适用筛选器的列表。
  14. 2.enable:是否在这个范围分裂
  15. 3.universalApk:是否创建所有可用的ABIs一个APK。
  16. AbiSplitesOptions的方法:
  17. 1.exclude(excludes):排除一些值。
  18. 2.include(include):包含一些值。
  19. 3.reset():重新设置split配置。
  20. ----------------------------------------------------------
  21. density{}对应的是DensitySplitOptions
  22. DensitySplitOptions的属性:
  23. 1.applicableFilters:返回此范围的所有适用筛选器的列表。
  24. 2.auto:编译系统是否确定分割“language-*”文件夹中的资源。
  25. 3.compatibleScreen:兼容屏幕列表
  26. 4.enable:是否拆分
  27. DensitySplitOptions的方法:
  28. 1.exclude(exclude):排除一些值
  29. 2.include(include):包含一些值
  30. 3.reset():重新设置split配置。
  31. -------------------------------------------------------
  32. language{}对应的是LanguageSplitOptions
  33. LanguageSplitOptions的属性:
  34. 1.enable:如果true,就是拆分language
  35. LanguageSplitOptions的方法:
  36. 1.include(include):包含一个模型。
  37. ---------------------------------------------------------
  38. splits{}的用法:
  39. splits {
  40. density {
  41. enable true
  42. exclude 'ldpi', 'mdpi'
  43. compatibleScreens 'normal', 'large', 'xlarge'
  44. }
  45. }
  46. 生成结果:
  47. app-hdpi-release.apk
  48. app-universal-release.apk
  49. app-xhdpi-release.apk
  50. app-xxhdpi-release.apk
  51. app-xxxhdpi-release.apk
  52. splits {
  53. abi {
  54. enable true
  55. reset()
  56. include 'x86', 'armeabi-v7a', 'mips'
  57. universalApk true
  58. }
  59. }
  60. 这个就是生成不同手机架构的app

APK-splite官方文档

Splite官方文档

参考文章

  • testOptions{}
  1. testOptions{}对应的是TestOptions
  2. TestOptions的属性:
  3. 1.reportDir:报告目录
  4. 2.resultDir:结果目录
  5. 3.unitTests:单元测试配置参数
  6. TestOptions包含unitTests{}
  7. -------------------------------------------------------
  8. unitTests{}对应的是UnitTestOptions
  9. UnitTestOptions的属性:
  10. 1.returnDefaultValues:无论unmocked方法从android.jar中抛出异常或是默认值(0null)。
  11. UnitTestOtions的方法:
  12. all(configClosure):配置所有单元测试任务。
  13. -------------------------------------------------
  14. testOptions{}的使用:
  15. testOptions {
  16. resultsDir = "$project.buildDir/foo/results"
  17. }

参考文档


AppExtension文档

Gradle翻译

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/196748
推荐阅读