android stduio gradle参数配置说明
主要用于小白扫盲和个人巩固学习使用
以下就是一个项目中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'}
更多相关文章
- android Gradle例如:“style attribute 'android:attr/keyboardNa
- 第一章:初入Android大门(Style 样式和Button事件)
- An internal error occurred during: "Check Android(安卓)SDK"
- Mac OS X下搭建Android(安卓)Source编译环境的问题及解决方法
- Android:inflate.inflate()方法
- Android(安卓)Studio 3.4离线安装(含开发工具、Grade、SDK、模拟
- Android模拟器SD卡的使用
- android 在APP内打开在线的office文件
- android自定义控件打包成jar文件