本文共 4308 字,大约阅读时间需要 14 分钟。
前面章节已经详细分析了Gradle的配置和使用,现在来总结一点小技巧。
(1) 确定根目录下的build.gradle中Android Gradle Plugin版本是否与本地插件版本一直,若不一直修改为本地插件版本
(2) 确定gradle/wrapper/gradle-wrapper.properties文件中gradle的版本在C:\Users\用户名.gradle\wrapper\dists是否已经离线存在
(3) 分别查看各个module中的build.gradle里面compileSdkVersion、buildToolsVersion、com.android.support等Android SDK的相应版本是否已经存在。
(4) 如果存在其他第三方库,若能提前下载完成最好。已经下载完成的库存放在C:\Users\用户名.gradle\caches\modules-2\files-2.1里面
以fresco为例,如果你之前在其他电脑上找到相应完整的目录,请拷贝到其中,以节省下载所需时间
(5) 明确依赖版本号。
在使用retrolambda的时候有过对java编译器的配置
如果仅需某一个module单独支持,只要在相应module的build.gradle下进行配置即可compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}
如果你希望全局配置,则需要配置根目录下的build.gradle,在其allprojects中进行配置即可
allprojects { repositories { jcenter() } tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 }}
注意设置java1.8版本需要开启jack编译,否则会抛出Error:Jack is required to support java 8 language features
defaultConfig { ... jackOptions { enabled true }}
一般情况下我们app的布局文件会随着项目的开发而发生爆炸式的增长。时间久了就会忘记某个功能用的都是哪些布局文件了。今儿就来向大家介绍如何对layout进行模块化分包。
首先来看看效果:
main模块与main2模块他们的布局是相互独立保存的,没有堆叠在一起。那么这个是怎么做到的呢?之前大家从eclipse直接转项目到Android Studio上的时候,不知道有没有注意到在app模块下的build.gradle有一个DSL叫sourceSets,通过修改sourceSets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除。Gradle就是通过它实现项目的布局定义。Android Studio插件默认实现了两个sourceSet:main和test。每个sourceSet都提供了一系列的属性,通过修改这些属性,可以定义该sourceSet所包含的源文件,比如java.srcDirs,res.srcDirssourceSets { main { java res } test { java res }}
1、按照自己的项目需求建立layout目录,例如本文就是/alllayouts/main/layout与/alllayouts/main2/layout
2、在module对应的build.gradle下添加sourceSets配置
sourceSets { main { res.srcDirs = [ 'src/main/res/alllayouts/main', 'src/main/res/alllayouts/main2', 'src/main/res' ] }}
注意:最后一行要添加
3、Sync Now
一旦引用库数量变多,这样或许就不够直观了。这种情况下,我们最好有一个单独的文件去统计这些配置。
我们新建一个config.gradle作为配置文件 具体配置如下ext { androidGradleVersion = '2.3.1' AndroidSupportVersion = '25.3.1' AndroidConstraintLayoutVerson = '1.0.2' compileSdkVersion = 25 buildToolsVersion = '25.0.2' defaultConfig = [ applicationId : "com.renyu.gradledemo", minSdkVersion : 15, targetSdkVersion : 25, versionCode : 1, versionName : "1.0" ]}
其中defaultConfig是一个map键值对,有别于上方的公共配置,这样看起来更清晰简洁
这里我们需要使用apply from来引用config.gradle。同理当你的gradle脚本太大的时候,你可以按照具体任务类型将一个大gradle脚本拆分成几个子脚本,然后分别apply from引入到主脚本中。// 这里的apply是为了让子模块使用apply from: "config.gradle"buildscript { repositories { jcenter() } dependencies { // root下build.gradle使用 apply from: "config.gradle" classpath "com.android.tools.build:gradle:$androidGradleVersion" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}allprojects { repositories { jcenter() }}task clean(type: Delete) { delete rootProject.buildDir}
再看看app模块下的build.gradle的配置
apply plugin: 'com.android.application'android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId rootProject.ext.defaultConfig.applicationId minSdkVersion rootProject.ext.defaultConfig.minSdkVersion targetSdkVersion rootProject.ext.defaultConfig.targetSdkVersion versionCode rootProject.ext.defaultConfig.versionCode versionName rootProject.ext.defaultConfig.versionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile "com.android.support:appcompat-v7:$rootProject.ext.AndroidSupportVersion" compile "com.android.support.constraint:constraint-layout:$rootProject.ext.AndroidConstraintLayoutVerson" testCompile 'junit:junit:4.12'}