Gradle应用例子(二)(待更)
例子5 编写一个通用的利于管理依赖库版本的脚本文件
参考项目
再应用Android插件时,我们通常会配置很多版本号,例如
... buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' } } ...
其中的com.android.tools.build:gradle:3.1.2
apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.newtrekwang.test" minSdkVersion 18 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0-alpha3' 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' }
其中的18,28,com.android.support:appcompat-v7:28.0.0-alpha3,com.android.support:appcompat-v7:28.0.0-alpha3等等
问题
这样直接显示配置的方式,版本号少量还行,多了就有点难受了。
- 构建的时候你要一个一个从别的地方copy版本号
- 加入多个module都依赖了相同的版本号,岂不是改一处,到处都要改
- 一些配置语句太长了
解决
把版本号分在另一个文件,其它地方要用就从文件里拿
例:
1.建一个gradle文件,存放常用的版本号和库名,可以看作存放的都是些键值对,利用gradle的project的扩展可以把这些键值对暂时放进去,然后其他gradle文件要用这些值时通过project获取就行。
version.gradle
// 版本号 ext.deps = [:] def versions = [:] versions.arch_core = '1.1.1' versions.constrant_layout= '1.0.2' versions.room = '1.1.1' versions.lifcycle = '1.1.1' versions.support = "27.1.1" versions.dagger = "2.15" versions.junit = "4.12" versions.espresso = "3.0.1" versions.rxjava2 = "2.1.3" versions.rx_android = "2.0.1" versions.retrofit = "2.3.0" versions.okhttp3 = "3.9.1" versions.mockwebserver = "3.8.1" versions.apache_commons = "2.5" versions.mockito = "2.7.19" versions.mockito_all = "1.10.19" versions.dexmaker = "2.2.0" versions.glide = "4.7.1" versions.timber = "4.5.1" versions.android_gradle_plugin = "3.1.2" versions.atsl_runner = "1.0.1" versions.atsl_rules = "1.0.1" versions.hamcrest = "1.3" versions.kotlin = "1.2.41" versions.paging = "1.0.1" versions.work = "1.0.0-alpha04" versions.navigation = "1.0.0-alpha01" versions.arouter = "1.2.2" versions.arouter_compiler = "1.1.3" def deps = [:] // support库 def support = [:] support.annotations = "com.android.support-annotations:$versions.support" support.app_compat = "com.android.support:appcompat-v7:$versions.support" support.recyclerview = "com.android.support:recyclerview-v7:$versions.support" support.cardview = "com.android.support:cardview-v7:$versions.support" support.design = "com.android.support:design:$versions.support" support.v4 = "com.android.support:support-v4:$versions.support" support.core_utils = "com.android.support:support-core-utils:$versions.support" support.constrant_layout = "com.android.support.constrant:constrant-layout:$versions.constrant_layout" deps.support = support //room相关库 def room = [:] room.runtime = "android.arch.persistence.room:runtime:$versions.room" room.compiler = "android.arch.persistence.room:compiler:$versions.room" room.rxjava2 = "android.arch.persistence.room:rxjava2:$versions.room" room.testing = "android.arch.persistence.room:testing:$versions.room" deps.room = room //lifecycle相关库 def lifecycle = [:] lifecycle.runtime = "android.arch.lifecycle:runtime:$versions.lifecycle" lifecycle.extensions = "android.arch.lifecycle:extensions:$versions.lifecycle" lifecycle.java8 = "android.arch.lifecycle:common-java8:$versions.lifecycle" lifecycle.compiler = "android.arch.lifecycle:compiler:$versions.lifecycle" deps.lifecycle = lifecycle // arch_core库 def arch_core = [:] arch_core.testing = "android.arch.core:core-testing:$versions.arch_core" deps.arch_core = arch_core //dagger 库 def dagger = [:] dagger.runtime = "com.google.dagger:dagger:$versions.dagger" dagger.android = "com.google.dagger:dagger-android:$versions.dagger" dagger.android_support = "com.google.dagger:dagger-android-support:$versions.dagger" dagger.compiler = "com.google.dagger:dagger-compiler:$versions.dagger" dagger.android_support_compiler = "com.google.dagger:dagger-android-processor:$versions.dagger" deps.dagger = dagger //glide库 def glide = [:] glide.runtime = "com.github.bumptech.glide:glide:$versions.glide" glide.compiler = "com.github.bumptech.glide:compiler:$versions.glide" deps.glide = glide // rxjava deps.rxjava2 = "io.reactivex.rxjava2:rxjava:$versions.rxjava2" deps.rx_android = "io.reactivex.rxjava2:rxandroid:$versions.rx_android" // gradle插件 deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin" // junit deps.junit = "junit:junit:$versions.junit" // ARouter deps.arouter = "com.alibaba:arouter-api:$versions.arouter" deps.arouter_compiler = "com.alibaba:arouter-compiler:$versions.arouter_compiler" // retrofit deps.retrofit = "com.squareup.retrofit2:retrofit:$versions.retrofit" deps.okhttp3 = "com.squareup.okhttp3:okhttp:$versions.okhttp3" deps.okhttp3_interceptor = "com.squareup.okhttp3:logging-interceptor:$versions.okhttp3" deps.retrofit_converter_gson = "com.squareup.retrofit2:converter-gson:$versions.retrofit" deps.retrofti_adapter_rxjava = "com.squareup.retrofit2:adapter-rxjava:$versions.retrofit" ext.deps = deps def build_versions = [:] build_versions.min_sdk = 19 build_versions.target_sdk = 28 build_versions.build_tools = "27.0.3" ext.build_versions = build_versions
2.在根目录的build.gradle的buildscript块中使project应用version.gradle,把version.gradle里的键值对加入扩展,应用后,后面的地方就可以由键名获取键值了,当然键值就是你配置的常用的版本号。
buildscript { apply from: 'version.gradle' repositories { google() jcenter() } dependencies { classpath deps.android_gradle_plugin // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
比如其中deps.android_gradle_plugin就指的是com.android.tools.build:gradle:versions.android_gradle_plugin,然后versions.android_gradle_plugin指的是3.1.2
同样的道理,一个libModule的build.gradle就可以配置为这样
apply plugin: 'com.android.library' android { compileSdkVersion build_versions.target_sdk buildToolsVersion build_versions.build_tools defaultConfig { minSdkVersion build_versions.min_sdk targetSdkVersion build_versions.target_sdk versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //support api deps.support.app_compat api deps.support.recyclerview api deps.support.cardview api deps.support.design api deps.support.v4 api deps.support.core_utils //junit testImplementation deps.junit //rxJava api deps.rxjava2 api deps.rx_android // net api deps.retrofit api deps.okhttp3 api deps.okhttp3_interceptor api deps.retrofit_converter_gson api deps.retrofti_adapter_rxjava //dagger2 api deps.dagger.runtime annotationProcessor deps.dagger.compiler }
要改版本号就在version.gradle里改,而且可以在version.gradle尽可能多的版本号或库名字,下次新建项目,直接copy version.gradle进去应用就可以了,不必再到处查库名和版本号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android 解析resources.arsc文件
1). 文件格式 resources.arsc文件格式.png 2). 头部信息 /** * Resource.arsc文件格式是由一系列的chunk构成,每一个chunk均包含ResChunk_header * * struct ResChunk_header { // Type identifier for this chunk. The meaning of this value depends // on the containing chunk. uint16_t type; // Size of the chunk header (in bytes). Adding this value to // the address of the chunk allows you to find its associated data // (if any). uint16_t headerSize; // Total size of this chunk (in bytes). This is the chunkSize plus // the size of any data a...
- 下一篇
Android 解析so文件
1). so文件结构 so文件结构.png 2). elf文件的数据结构类 public class ElfType32 { public elf32_rel rel; public elf32_rela rela; /**头部信息*/ public elf32_hdr hdr; public List<elf32_sym> symList = new ArrayList<>(); /**可能会有多个程序头*/ public List<elf32_phdr> phdrList = new ArrayList<>(); /**可能会有多个段头*/ public List<elf32_shdr> shdrList = new ArrayList<>(); /**可能会有多个字符串值*/ public List<elf32_strtb> strtbList = new ArrayList<>(); /** * typedef struct elf32_rel { Elf32_Addr r_offs...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址