Android Studio项目版本号的统一管理

项目前段时间进行了组件化改造,由于分出了很多的model,所以以前的依赖关系也需要变化,所以整理出这一篇版本号管理和依赖关系变更的记录.

1.版本号统一管理

统一管理的方式有比较多,这里我只介绍项目中的方式.

步骤1.首先你需要新建一个版本号记录的文件,我这里是versions.gradle,里面是所有的你需要管理的版本号信息.

ext.deps = [:]
def versions = [:]
versions.support = "27.0.2"
versions.android_gradle_plugin = "3.0.1"
versions.junit = "4.12"
versions.espresso = "3.0.1"
versions.mockito = "2.7.19"
versions.mockito_all = "1.10.19"
versions.dexmaker = "2.2.0"
versions.atsl_runner = "1.0.1"
versions.atsl_rules = "1.0.1"
versions.hamcrest = "1.3"
def deps = [:]

def support = [:]
support.annotations = "com.android.support:support-annotations:$versions.support"
support.appcompat_v7 = "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.support_v4 = "com.android.support:support-v4:$versions.support"
//以下5个为V4的拆分库,可根据具体需求引用,可减小APK大小
support.core_utils = "com.android.support:support-core-utils:$versions.support"
support.core_ui = "com.android.support:support-core-ui:$versions.support"
support.media_compat = "com.android.support:support-media-compat:$versions.support"
support.support_fragment = "com.android.support:support-fragment:$versions.support"
support.support_compat = "com.android.support:support-compat:$versions.support"
deps.support = support

def espresso = [:]
espresso.core = "com.android.support.test.espresso:espresso-core:$versions.espresso"
espresso.contrib = "com.android.support.test.espresso:espresso-contrib:$versions.espresso"
espresso.intents = "com.android.support.test.espresso:espresso-intents:$versions.espresso"
deps.espresso = espresso

def atsl = [:]
atsl.runner = "com.android.support.test:runner:$versions.atsl_runner"
atsl.rules = "com.android.support.test:rules:$versions.atsl_runner"
deps.atsl = atsl

def mockito = [:]
mockito.core = "org.mockito:mockito-core:$versions.mockito"
mockito.all = "org.mockito:mockito-all:$versions.mockito_all"
deps.mockito = mockito

deps.junit = "junit:junit:$versions.junit"
deps.dexmaker = "com.linkedin.dexmaker:dexmaker-mockito:$versions.dexmaker"
deps.hamcrest = "org.hamcrest:hamcrest-all:$versions.hamcrest"
deps.android_gradle_plugin = "com.android.tools.build:gradle:$versions.android_gradle_plugin"

ext.deps = deps

def build_versions = [:]
build_versions.min_sdk = 17
build_versions.target_sdk = 19
build_versions.compile_sdk = 27
build_versions.build_tools = "27.0.2"
ext.build_versions = build_versions

def addRepos(RepositoryHandler handler) {
    handler.google()
    handler.jcenter()
    handler.mavenCentral()
    handler.maven { url 'https://jitpack.io' }
}

ext.addRepos = this.&addRepos

上面我并没有把所有的都放到这里,以后会逐渐都放过来.

步骤2.使用的时候比较简单如下:

在根目录下的build.gradle配置一些信息.

buildscript {
    apply from: 'versions.gradle'//这里是引入我们的配置文件
    addRepos(repositories)//调用一下添加依赖的方法
    dependencies {
        classpath deps.android_gradle_plugin//使用
        classpath 'com.luojilab.ddcomponent:build-gradle:1.2.0'
    }
}
//所有的model都添加依赖
allprojects {
    addRepos(repositories)
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

repositories {
    jcenter()
    maven { url "https://jitpack.io" }
    mavenCentral()
    google()
}

在其他的model中使用,其实和以前一样的

apply plugin: 'com.dd.comgradle'
apply plugin: 'com.jakewharton.butterknife'

android {
    compileSdkVersion build_versions.compile_sdk
    buildToolsVersion build_versions.build_tools

    defaultConfig {
        minSdkVersion build_versions.min_sdk
        targetSdkVersion build_versions.target_sdk
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ moduleName : project.getName() ]
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    resourcePrefix "account_"
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    testImplementation deps.junit
    androidTestImplementation deps.espresso.core
    androidTestImplementation deps.espresso.contrib
    androidTestImplementation deps.espresso.intents
}

2.依赖关系变化

组件项目的依赖关系和以前的主要区别是,现在不是直接依赖三方库了,是出现了中间的一个名为lib_baselib的model,这里面是所有的依赖,其他的model主要通过在build.gradle里面配置

implementation project(':lib_baselib')