使用AS经常会创建很多通用的库,可能有很多工程会依赖,一般有几种办法在其他工程依赖:

  • 直接imports库的对应模块。
  • 在本地创建maven仓库,其他项目通过本地仓库引用。
  • 小型团队在局域网使用nexus3搭建私有maven仓库。
  • 将库发布到jCenter / Maven Central。

使用以上四种都有一些缺点,前三种只能在本地或者局域网,第四种可以最大化实现共享,但是发布到jCenter / Maven Central速度非常慢等。是不是有其他方法呢?
有。用Gitee/GitHub可以实现,因国内GitHub访问速度也是很慢,以Gitee和Android studio为例。其实现思路为:

1、 AS生成本地库
2、上传Gitee/GitHub仓库
3、AS其他项目依赖Gitee/GitHub仓库

Android Studio 生成本地库

在对应模块的build.gradle增加如下内容

apply plugin: 'maven'

uploadArchives {
    repositories.mavenDeployer {
        // 本地仓库路径
        repository(url: 'file://D:/repository/')
        // 唯一标识
        pom.groupId = "com.example"
        // 模块名称
        pom.artifactId = "test"
        // 版本号
        pom.version = "1.0.0"
    }
}

使用命令一步生成所有库到本地仓库

gradlew  uploadArchives

使用AS单独生成某个库到本地仓库,如图所示点右键 run生成。

androidstudio配置maven 源 android studio 本地maven_上传

上传Gitee/GitHub仓库

在Gitee/GitHub创建一个仓库,如maven_repo,再进入本地仓库“D:/repository”,可以使用以下命令上传到远程仓库。

cd D:/repository
git init
git add .
git commit -am "XXXXXXX"
git remote add origin <Gitee/GitHub 仓库地址>
git push origin master
AS其他项目依赖Gitee/GitHub仓库

获取Gitee/GitHub仓库的原始文件URL。
Gitee为https://gitee.com/<用户名>/<仓库名-maven_repo>/raw/<分支-master>
Github为https://raw.githubusercontent.com/<用户名>/<仓库名-maven_repo>/<分支-master>
配置项目build.gradle,增加maven仓库地址,如下所示:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        maven{url 'https://gitee.com/XXXXX/mvn_repo/raw/master'}
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven{url 'https://gitee.com/XXXXX/maven_repo/raw/master'}
        google()
        jcenter()
    }
}

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

下一步在app的build.gradle依赖库

implementation 'com.example:test:1.0.0'

至此Gitee/GitHub 创建私人Android studio库的 Maven 仓库已经完成。但是测试时发现如果Gitee/GitHub 创建是私有库,按如上配置无法成功下载test库,所以目前只能支持公开库才能下载。

Android Studio 生成本地库到当前项目目录

再深思另一个问题,项目生成库到本他仓库,需要再用git命令再上传到远程仓库,哪我是否可以直接将本地仓库建立在项目的目录下,这样生成的库可以直接用AS或者命令一步上传远程仓库,修改maven的url地址。

apply plugin: 'maven'

def repository_url() {
    File file = new File(getRootDir().getAbsolutePath() + File.separator + "repository")
    return file.toURI().toURL()
}

uploadArchives {
    repositories.mavenDeployer {
        // 本地仓库路径
        repository(url: repository_url())
        // 唯一标识
        pom.groupId = "com.example"
        // 模块名称
        pom.artifactId = "test"
        // 版本号
        pom.version = "1.0.0"
    }
}