序文

Android领域耕耘了多年的老司机们,技能大多现已沉淀到足以自己写各种各样的结构了。你有没有想过?其实你能够将写好的结构开源出来,让更多人获益,提高开发效率。亦或者是引用过他人com.github打头的开源结构,但是不知道自己如何发布这样一个结构出去。假如你对这样的写法不熟悉,那么,你还有待加油。

// 增加以下代码到项目根目录下的build.gradle
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}
// 增加以下代码到app模块的build.gradle
dependencies {
    def latest_version = '1.0'
    implementation 'com.github.dora4:dora-eventbus-support:$latest_version'
}

旧版别Gradle发布方法

那么咱们言归正传,由于库项目不是一个app项目,所以不应该保存app模块。当然保存也不要紧,只不过看着有些别扭算了。咱们第一步是要创立一个app项目,然后有两种挑选。要么你再创立一个lib模块,然后把app模块删除去。也能够直接将app模块更名为lib。改文件夹名称还不行,接下来你应该在settings.gradle中包括这个文件夹。

include ':lib'

然后把测验相关的一些东西去掉,只留纯洁的你的结构的代码。你一顿操作猛如虎,咚咚咚地将结构代码写好了,也调试好了,现在到了发布环节了。

classpath "com.github.dcendents:android-maven-gradle-plugin:1.5"

在项目根目录到build.gradle引入这个gradle插件,然后在lib模块的build.gradle中加入以下代码。

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'

仔细的小伙伴应该发现了,这里是com.android.library,而不是com.android.application。由于咱们是库项目,不是app项目。接下来咱们将代码提交到GitHub这个全球最大的同性结交渠道,号称“GuyHub”。然后咱们在这里增加库的发布。

Gradle如何发布一个Android开源框架到JitPack

点击Craft a new release。

Gradle如何发布一个Android开源框架到JitPack
然后在输入框填入结构的版别号。

Gradle如何发布一个Android开源框架到JitPack
点击Publish release就能够了。

Gradle如何发布一个Android开源框架到JitPack
最后翻开 jitpack.io 检查开源结构的编译进度。

新版别Gradle发布方法

假如能够一向运用上续代码发布结构那该多好啊!很遗憾,当gradle版别发生了一次严重更新后,写法就千差万别了,但大体流程仍是一致的。笔者也是研究了许久,才又从头将开源结构运用高版别的gradle发布出去。我觉得这里应该有个。

新版别的gradle的发布我采用kts脚本,当然这个不是必须的,只不过kts有代码提示算了。新版别gradle发布开源结构参阅这个项目github.com/dora4/dora-… ,这个库比较简练,便利学习。我运用另一个库的代码解说。

plugins {
    id("com.android.library")
    id("kotlin-android")
    id("maven-publish")
}
android {
    namespace = "dora.dcache"
    compileSdk = 33
    defaultConfig {
        minSdk = 21
        targetSdk = 33
    }
    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}
dependencies {
    implementation("androidx.appcompat:appcompat:1.2.0")
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.2.0")
    implementation("com.squareup.okhttp3:okhttp:4.8.0")
    implementation("com.squareup.retrofit2:converter-gson:2.8.1")
    implementation("com.squareup.retrofit2:retrofit:2.8.1")
    implementation("com.squareup.retrofit2:adapter-rxjava2:2.8.1")
    implementation("io.reactivex.rxjava2:rxjava:2.0.4")
    implementation("io.reactivex.rxjava2:rxandroid:2.0.1")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.10")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2")
}
afterEvaluate {
    publishing {
        publications {
            register("release", MavenPublication::class) {
                from(components["release"])
                groupId = "com.github.dora4"
                artifactId = "dcache-android"
                version = "1.6.19"
            }
        }
    }
}

最主要的是要apply maven-publish这个插件,然后在afterEvaluate中加入发布的装备信息。你别看代码很简单,但是网上的资料大多都有各种各样的问题,找到能够让你编译过的并不容易。在此之前你要在settings.gradle.kts中加入以下代码。

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.namespace == "com.android.tools.build") {
                useModule("com.android.tools.build:gradle:4.1.2")
            }
            if (requested.id.namespace == "org.jetbrains.kotlin") {
                val kotlin_version = "1.8.10"
                useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
            }
            if (requested.id.namespace == "com.github.dcendents") {
                useModule("com.github.dcendents:android-maven-gradle-plugin:1.5")
            }
        }
    }
}

然后在项目根目录的build.gradle.kts加入以下代码。

plugins {
    id("com.android.library") version("7.3.1") apply(false)
    id("org.jetbrains.kotlin.android") version("1.7.20") apply(false)
    id("com.github.dcendents.android-maven") version("1.5") apply(false)
}

OK,功德圆满!剩余的跟旧版别的发布方法类似。

对写开源结构的一点观点

作为一个开发开源结构的Android工程师,必定要有一种精益求精的精神,在一个比较小的功能上尽可能做到完美,把各种情况都考虑到位。由于结构冗余代码太多,他人在选结构的时候也会考虑对apk安装包大小影响的。尽量做到小而精,而不是大而全。代码越多,越容易出bug,而开源结构是要给很多人运用的,他人不太可能运用你有很多bug的结构,除非那人原本也不太懂。我们一同把自己擅长的领域开源出来,这样能够节约我们的开发时刻,不是很好的一件事吗?