版本管理库的 Android 项目结构

219 阅读1分钟

- 本文使用 Kotlin 语言

使用统一版本管理库的项目结构和具体使用方式。需要在项目中提供一个版本管理库,方便项目内不同的 model 使用统一的三方库。

项目结构,首先建立一个目录 TestProject 作为整个项目的根目录,内部包括 TestApp 主项目代码仓、TestPlugin 版本库项目代码仓、TestBase 基础组件项目代码仓,上述三个项目为平级关系。

TestProject           // 项目根目录
  -- TestApp          // 主项目
     -- App           // 主 App model
     -- LibModel      // 业务 model
  -- TestPlugin       // 插件库 model
  -- TestBase         // 基础组件项目
     -- LibComponent  // UI 组件 model
     -- LibNetWork    // 网络组件 model

1. 版本库 model 定义

1.1. 版本管理库的 build.gradle 文件定义

buildscript {
    repositories {
        mavenCentral()
        google()
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
    }
}
apply plugin: 'kotlin'
apply plugin: 'java-gradle-plugin'

repositories {
    mavenCentral()
    google()
    jcenter()
}
dependencies {
    implementation gradleApi()
}
compileKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
compileTestKotlin {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

gradlePlugin {
    plugins {
        version {
            id = 'com.jaymz.plugin.version'
            implementationClass = 'com.jaymz.plugin.version.VersionPlugin'
        }
    }
}

1.2. 管理库版本定义和三方库常量定义

在项目内实现一个继承自 Plugin 的类,即 VersionPlugin

package com.jaymz.plugin.version

import org.gradle.api.Plugin
import org.gradle.api.Project

class VersionPlugin : Plugin<Project> {
    override fun apply(project: Project) {
    }
}

定义我们的常量三方库常量类

class 文件内定义常量,共外部引用

object PluginManager {
    const val glide = "com.github.bumptech.glide:glide:4.12.0"
}

2. 其他 model 通过版本库引用统一第三方库版本

2.1. 主项目的 setting.builde 文件

导入同级的项目到主项目内,includeBuild(new File(settingsDir, "project path"))

rootProject.name = "TestDemo"
include ':app'
include ':LibModel'

// 导入插件管理项目
includeBuild(new File(settingsDir, "../TestPlugin"))
// 导入基础项目组件项目
includeBuild(new File(settingsDir, "../TestBase"))

// 引用 base 项目下的本地 model
include 'LibComponent'
include 'LibNetWork'
project(":LibComponent").projectDir = new File(settingsDir, "../TestBase/LibComponent")
project(":LibNetWork").projectDir = new File(settingsDir, "../TestBase/LibNetWork")

2.2. 主项目的 build.gradle 文件

引入自定义的插件库,plugins {}

buildscript {
    repositories {
     // ...
    }
    dependencies {
     // ...
    }
}
plugins {
    id("com.jaymz.plugin.version")
}

allprojects {
 // ...
}

2.3. 主项目的 LibModel 库的 build.gradle 文件

使用插件管理库提供的三方库

dependencies {
    api PluginManager.glide
}