闭包下包含:
1、repositories闭包
2、dependencies闭包
maven库 repositories 示列
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' }
google()
jcenter() //代码托管仓库
mavenCentral()
}
插件dependencies示列
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
}
闭包下包含:maven库repositories
maven库示列
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' }
google()
jcenter() //代码托管仓库
mavenCentral()
}
compileSdkVersion是用来指定编译应用程序时所使用的Android SDK版本。它对应于在项目的build.gradle文件中的android块中设置的值。一般情况下,我们将其设置为最新的Android SDK版本,以便能够使用最新的Android平台提供的功能和特性
compileSdkVersion和minSdkVersion比较,compileSdkVersion表示当前项目的编译版本,即你想让AndroidStudio以什么SDK版本去编译你的项目,minSdkVersion表示当前项目支持的最低安卓系统版本,
buildToolsVersion则是指构建工具的SDK版本,也就是AndroidStudio中设置的AndroidSDK版本,buildToolsVersion要高于compileSdkVersion版本,这个很好理解,如果编译版本高于AndroidStudio的SDK版本,那AndroidStudio怎么给项目编译呢?
targetSdkVersion app的目标sdk版本,可以理解为当前app在这个版本是比较稳定的,针对这个版本所开发的,是安卓提供的前向兼容的主要手段,它的作用就是当targetSdkVersion为20的app运行在系统版本号高于20的手机系统中,app所执行的旧版本api,在高版本可能不一样了,但是安卓为了兼容在系统层会读取当前应用的targetSdkVersion,当targetSdkVersion版本号低于当前版本就会执行旧版本的api,不会导致由于系统的原因而让app运行失常。
defaultConfig{} 是 Android Gradle 插件中使用的默认配置块。它用于指定应用程序的默认配置参数。
defaultConfig {
applicationId "com.yxj.xxxx"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode 0000
versionName "1.1.0000"
ndk {
// 1、armeabi-v7a:第七代及以上的ARM处理器,2011年以后生产的大部分Android设备都使用。
// 2、arm64-v8a:第8代、64位ARM处理器,很少设备,三星GalaxyS6是其中之一。
// 3、armeabi:第5代、第6代的ARM处理器,早期的手机用的比较多。
// 4、X86:平板、模拟器用得比较多。
// 5、X86_64:64位得平板。
// abiFilters 'armeabi', 'x86',"armeabi-v7a", "arm64-v8a",'x86_64'
}
//Android应用程序默认具有SingleDex支持,这限制了您的应用程序只有65536个方法(引用).所以multidexEnabled = true只是意味着你现在可以在你的应用程序中编写超过65536个方法(引用).
multiDexEnabled true
}
signingConfigs {
debug {
storeFile file('F:\\Android_work\\work\\xxx.keystore')
storePassword '000000'
keyAlias = 'keyAlias' //key的别名
keyPassword '000000'
v1SigningEnabled true
v2SigningEnabled true
}
release {
storeFile file('F:\\Android_work\\work\\xxx.keystore')
storePassword '000000'
keyAlias = 'keyAlias '//key的别名
keyPassword '000000'
v1SigningEnabled true
v2SigningEnabled true
}
}
lintOptions {
// true--关闭lint报告的分析进度
quiet true
// true--错误发生后停止gradle构建
abortOnError false
// true--只报告error
ignoreWarnings true
// true--忽略有错误的文件的全/绝对路径(默认是true)
//absolutePaths true
// true--检查所有问题点,包含其他默认关闭项
checkAllWarnings true
// true--所有warning当做error
warningsAsErrors true
// 关闭指定问题检查
disable 'TypographyFractions','TypographyQuotes'
// 打开指定问题检查
enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
// 仅检查指定问题
check 'NewApi', 'InlinedApi'
// true--error输出文件不包含源码行号
noLines true
// true--显示错误的所有发生位置,不截取
showAll true
// 回退lint设置(默认规则)
lintConfig file("default-lint.xml")
// true--生成txt格式报告(默认false)
textReport true
// 重定向输出;可以是文件或'stdout'
textOutput 'stdout'
// true--生成XML格式报告
xmlReport false
// 指定xml报告文档(默认lint-results.xml)
xmlOutput file("lint-report.xml")
// true--生成HTML报告(带问题解释,源码位置,等)
htmlReport true
// html报告可选路径(构建器默认是lint-results.html )
htmlOutput file("lint-report.html")
// true--所有正式版构建执行规则生成崩溃的lint检查,如果有崩溃问题将停止构建
checkReleaseBuilds true
// 在发布版本编译时检查(即使不包含lint目标),指定问题的规则生成崩溃
fatal 'NewApi', 'InlineApi'
// 指定问题的规则生成错误
error 'Wakelock', 'TextViewEdits'
// 指定问题的规则生成警告
warning 'ResourceAsColor'
// 忽略指定问题的规则(同关闭检查)
ignore 'TypographyQuotes'
}
compileOptions {
//配置 Java 编译参数:
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
// Java 编译器标志参数:
compilerArgs.addAll(['-Xlint:unchecked', '-Xlint:deprecation'])
//配置 Kotlin 编译参数:
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs += ['-Xopt-in=kotlin.RequiresOptIn']
//配置 C 语言编译参数:
apply plugin: 'cpp'
cppCompilerArgs.add('-std=c99')
cppCompilerArgs.add('-Wall')
//配置 C++ 编译参数:
apply plugin: 'cpp'
cppCompilerArgs.add('-std=c++11')
cppCompilerArgs.add('-Wall')
}
buildTypes {
//发布版本类型
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
// 测试类型,给测试人员
debug{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
// 本地类型,和后端联调使用
local{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// 配置packagingOptions
packagingOptions {
//exclude:用于排除特定的资源文件或类文件,使其不被打包到最终的APK文件中。可以使用通配符来匹配文件名或文件路径
exclude 'META-INF/LICENSE.txt' // 排除名为LICENSE.txt的文件
exclude 'META-INF/*.txt' // 排除所有以.txt结尾的文件
//merge:用于控制冲突资源文件的合并策略。可以使用"0"表示不合并,使用"1"表示合并,使用"2"表示强制合并。
merge 'resources.arsc' 0 // 不合并resources.arsc文件
merge 'assets/strings.txt' 1 // 合并assets目录下的strings.txt文件
merge 'assets/*.txt' 2 // 强制合并assets目录下所有以.txt结尾的文件
//pickFirst:用于控制冲突资源文件的优先选择策略。可以使用"0"表示选择第一个出现的文件,使用"1"表示选择最后一个出现的文件,使用"2"表示选择全部文件。
pickFirst 'res/values/strings.xml' 0 // 选择第一个出现的strings.xml文件
pickFirst 'assets/logo.png' 1 // 选择最后一个出现的logo.png文件
pickFirst 'assets/*.png' 2 // 选择全部以.png结尾的文件
//doNotStrip Gradle 在构建 APK 时将会保留这些被标记的文件和文件夹,并不会进行剥离操作。
doNotStrip "*/armeabi/libYTCommon.so"
doNotStrip "*/armeabi-v7a/libYTCommon.so"
doNotStrip "*/x86/libYTCommon.so"
doNotStrip "*/arm64-v8a/libYTCommon.so"
}
sourceSets {
main {
manifest.srcFile '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' // 指定源码目录
}
resources {
srcDir 'src/resources' //资源目录
}
}
aaptOptions {
//给 aapt 执行时添加额外参数,添加的参数可通过 aapt --help 进行查看
additionalParameters '--auto-add-overlay'
additionalParameters '--rename-manifest-package','com.zinc.test' // 会将包名更改为 com.zinc.test
//设置线程数
cruncherProcesses 4
//设置是否无法找到配置条目,则强制aapt返回错误。
failOnMissingConfigEntry true
//设置忽略的资源
// 忽略掉 png 后缀的图像,只会排除 assets 下的资源,res下的资源不会排除
ignoreAssets "*.png"
//设置忽略的资源 noCompress 'foo', 'bar'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
// 忽略掉 png 后缀的图像,只会排除 res 下的资源,assets下的资源不会排除
ignoreAssetsPattern '*.png'
//是否对资源进行压缩,默认不对"jpg"、"png"压缩。如果传入’’,则表明全部资源不会进行压缩。压缩后的资源可以通过 aapt l -v apk路径 进行查看压缩的细节。
// 不对 bat 进行压缩
noCompress '.bat'
}
productFlavors{}闭包:多个渠道配置
productFlavors是android{}中的一个扩展属性,主要用来让同一套代码可以打包成不同的apk包,又可以成为变体(Variants)。其实该productFlavors属性是与buildTypes配合使用的
buildFeatures
dependencies {
//引入文件树,这里会把libs目录下所有的jar包自动引入
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//引入指定jar包文件,这里传递是相对路径即相当于module下的build.gradle文件的路径,如以下写法则是引入与module下的build.gradle同路径下的jar包
implementation files('crazymo.jar')
//引入依赖库Module方式1
implementation project(':libcrazymo')
implementation project(path:':libcrazymo')
}