主要用于小白扫盲和个人巩固学习使用

以下就是一个项目中build.gradle常用的配置参数
当中基本都已经注释包含的意义,现在我们来对他们一个个进行分解

//当前项目类型为library类型apply plugin: 'com.android.library'// 加载配置文件final Properties properties = new Properties()InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream()properties.load(inputStream)android {    compileSdkVersion rootProject.ext.compileSdkVersion    buildToolsVersion rootProject.ext.buildToolsVersion    defaultConfig {        minSdkVersion rootProject.ext.minSdkVersion        targetSdkVersion rootProject.ext.targetSdkVersion        versionCode rootProject.ext.appVersionCode        versionName rootProject.ext.appVersionName        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"        buildConfigField 'String', 'LOGIN_URL', 'API_BASE_URL + "/page/toLogin"'        buildConfigField 'String', 'API_BASE_URL', '"http://127.0.0.1:12206/"'         buildConfigField 'String', 'UMENT_CHANNEL', '"DEV"'                //从配置文件中加载key=chennelList的值                buildConfigField 'String', 'CHENNEL_LIST_JSON_STRING', '"' + properties.getProperty('chennelList', '') + '"'                //可支持的内核版本        ndk {            abiFilters "armeabi"            abiFilters "armeabi-v7a"            abiFilters "x86"        }    }    //渠道列表    buildTypes {        //生产渠道        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            buildConfigField 'String', 'API_BASE_URL', '"https://xxxx.com"'             buildConfigField 'String', 'UMENT_CHANNEL', '"release"'        }          //其他渠道        mem555 {            initWith debug            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            buildConfigField 'String', 'API_BASE_URL', '"https://xxxx.com"'             buildConfigField 'String', 'UMENT_CHANNEL', '"MEM"'        }        //更多渠道参考上方已有的渠道                <.....>    }    //不检查警告错误    lintOptions {        abortOnError false    }}//引用库dependencies {    //资源文件的引用    implementation fileTree(dir: 'libs', include: ['*.jar'])    //引用测试支持,但是这个jar库的com.android.support例外    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support'    })    //注解代理    annotationProcessor rootProject.ext.lombokProcess         //仅在当前项目中能使用aspectjrt:1.8.9这个类库的API        compile 'org.aspectj:aspectjrt:1.8.9'    //所有引用了当前项目的项目都能使用model项目中的类    api project(':model')    //所有引用了当前项目的项目都能使用fastjson:1.2.46的类    api 'com.alibaba:fastjson:1.2.46'}//加入一个task读写文件任务,用于把当前所有的环境配置到配置文件中task initChennel() {    println '开始初始化环境'    StringBuffer sb = new StringBuffer()    def chennellist = android.buildTypes    chennellist.each { chennel ->        def paramMap = chennel.buildConfigFields        paramMap.each {            sb.append("${it.key},${it.value.value.replace("\"","")}|")        }    }    sb = new StringBuffer(sb.substring(0,sb.length() - 1))    File file = project.rootProject.file('local.properties')    Writer w = new FileWriter(file)    properties.put("chennelList", sb.toString())    println sb.toString()    properties.store(w, "conments")    println '环境初始化完成'}//包含UnitTest的task不要启动tasks.whenTaskAdded { task ->    if (task.name.contains('UnitTest')) {        task.enabled = false    }}

一切对一般来说,配置项都是在下面的闭包中进行配置,但是我们的例子里,可以见到有及部分并不是写在android{}内的,,为什么呢?有什么区别呢,,一般来说,写在Android闭包外的东西可以是grovvy中的一些task,或者其他代码片段。

例如,在这个配置文件里,我们就加载了一个参数文件,文件是以key-value方式进行存储的,那么在后面的android{}中我们就可以使用这个文件内的一些东西了,使用方式properties.getProperty('chennelList', ''),第一个参数表示key,第二个表示默认值。
另外我们还可以写一些grovvy代码来执行一些编译时任务如:task initChennel() {}
在这里让gradle编译的时候加入一个我的task,从而获得当前所有的渠道,最后写入配置文件中,使我在对android{properties.getProperty('chennelList', '')}配置的时候随能给到一个理想的值我。

//当前项目类型为library类型apply plugin: 'com.android.library'// 加载配置文件final Properties properties = new Properties()InputStream inputStream = project.rootProject.file('local.properties').newDataInputStream()properties.load(inputStream)android{...}//加入一个task读写文件任务,用于把当前所有的环境配置到配置文件中task initChennel() {}//包含UnitTest的task不要启动tasks.whenTaskAdded { task ->}

buildConfigField

buildConfigField 'String', 'UMENT_CHANNEL', '"DEV"'

这个主要作用就是当项目在编译的时候是会默认生成一个BuildConfig文件,如果加入了这段代码,那么意味着,当BuildConfig生成的时候,他会在类内创建一个静态常量值,这里需要3个参数
1.数据类型
2.属性名称
3.属性值

public static final String UMENT_CHANNEL = "DEV";

在我们的项目比较大的时候,往往会分成多个模块进行工作,但是每一个模块工程都会有私有的build.gradle配置信息,这个时候想要统一构建版本的时候就显得很麻烦了,要一个接一个的改,十分不方便,那怎么办呢?其实你们可以见到,在这个build.gradle中我是这样写的

    compileSdkVersion rootProject.ext.compileSdkVersion    buildToolsVersion rootProject.ext.buildToolsVersion

我这里的这些版本信息放在了一个公共的地方,所有子项目都可以访问他来统一管理,那么,怎么使用呢?
在项目的根路径下,会有一个build.gradle文件,其次子项目再有私有的build.gradle文件,只要在根目录的build.gradle中进行编写即可。看下面的,大家稍微想想就能理解了,这种方式还有更多的妙用,大家可以自己发掘

ext {    defaultPublishConfig = project.hasProperty('buildType') ? project.property('buildType') : 'debug'    buildToolsVersion = '27.0.1'    compileSdkVersion = 27    targetSdkVersion = 27     appVersionCode = 13    appVersionName = '1.0.13'}

更多相关文章

  1. android Gradle例如:“style attribute 'android:attr/keyboardNa
  2. 第一章:初入Android大门(Style 样式和Button事件)
  3. An internal error occurred during: "Check Android(安卓)SDK"
  4. Mac OS X下搭建Android(安卓)Source编译环境的问题及解决方法
  5. Android:inflate.inflate()方法
  6. Android(安卓)Studio 3.4离线安装(含开发工具、Grade、SDK、模拟
  7. Android模拟器SD卡的使用
  8. android 在APP内打开在线的office文件
  9. android自定义控件打包成jar文件

随机推荐

  1. Ubuntu下配置Android
  2. 【eoeAndroid社区索引】android 条形码的
  3. 25个你应该阅读的Android网站
  4. Android(安卓)使用 MPAndroidChart 实现
  5. Android(安卓)简单记事本
  6. Android仿照淘宝,京东,当当购物平台
  7. Android(安卓)Screen Monitor使用
  8. android Launcher Demo小结
  9. Android动画循环弹动cycleInterpolator
  10. Android中Activity共享变量的另一方法:App