安卓使用Gitee搭建远程Maven仓

背景

  上一期讲到了Maven仓的本地实现,但实际开发过程中,使用本地仓进行合作开发是不现实的,这时,我们可以考虑使用第三方的代码管理工具去实现,例如Gitee。但是Gitee 并不是专门的 Maven 仓库管理工具,因此在使用上可能会有一些限制,并不能自动完成一个Maven仓,我们可以将本地构建的Maven项目代码上传到 Gitee 指定文件夹中,确保 pom.xml 文件正确配置了项目的基本信息和依赖即可。

  本地Maven仓的实现请参考:安卓本地Maven仓的实现

实现

  1. 从Gitee上拉取一个自己的项目,找到app下的build.gradle文件,将com.android.application改成com.android.library。
plugins {
    id 'com.android.library'
}

在这里插入图片描述

  1. 将AndroidManifest.xml文件中的application标签删除,并将app下的build.gradle文件中applicationId注释掉。

在这里插入图片描述

  1. 选中你的项目,点击Build窗口中的Make Module生成对应的aar(Android Archive)文件。AAR文件是Android库项目的输出格式,包含了编译后的代码、资源文件、清单文件等。

在这里插入图片描述

  1. 生成的aar文件通常是在bulid->outputs->aar下。将生成的文件复制到一个方便的目录下,任意都可。
    在这里插入图片描述

  2. 在项目的根目录下创建一个maven文件夹,用于存储后续生成的依赖文件。

在这里插入图片描述

  1. 在app下的build.gradle中添加maven-publish插件,并配置仓库地址。配置完成后Sync Now即可。
plugins {
    id 'com.android.library'
    id 'maven-publish'
}

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                groupId 'com.example.navtest' // 可以随意取,一般取包名
                artifactId 'navtest' // 可以随意取,一般取库的名字
                version '1.0.0' // 版本号

                artifact(uri("file://D:/yhf/maven/app-debug.aar")) // 此为存放aar文件的位置
            }
        }
        repositories {
            maven {
                url uri("${rootDir}/maven") // rootDir为项目根目录,maven为存放maven库的文件夹
            }
        }
    }
}
  1. Sync完成后在Gradle中会生成如下目录结构。

在这里插入图片描述

  1. 若你的Studio中没有,可能是未打开相应的开关,找到Settings中Experimenta,将如下图所示勾上即可。
    在这里插入图片描述

  2. 在一切准备完成后,双击publish,成功后即可生成maven仓所有的所有文件。
    在这里插入图片描述

  3. 生成的文件结构如下图所示。
    在这里插入图片描述

  4. 将生成的maven文件夹下所有文件push到Gitee代码仓中,如下所示。

在这里插入图片描述

  1. 在一个新的安卓应用项目project下的build.gradle文件中(新版是在settings.gradle中),引入远程maven仓。如果不会查找自己正确的maven仓地址,可以查看后文中的注意事项。
pluginManagement {
    repositories {
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
        maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
    }

在这里插入图片描述

  1. 在app下的build.gradle文件中导入依赖。
dependencies {
    implementation "com.example.navtest:navtest:1.0.0"
}
  1. 之后点击Sync Now即可拉取对应的aar包了,在Gradle包中可以找到对应的包。

在这里插入图片描述

  1. 在需要的地方直接调用相关方法即可。

在这里插入图片描述

注意事项

问题:
通过maven仓下载的pom文件为html文件问题。
在这里插入图片描述

原因:
这是因为在配置Maven仓时,直接选取了Gitee代码仓管理路径。

pluginManagement {
    repositories {
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
        maven {url "https://gitee.com/hfyangi/instrument/blob/master/maven"}
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {url "https://gitee.com/hfyangi/instrument/blob/master/maven"}
    }
}

在这里插入图片描述
这时候拉取的实际是Gitee展示代码的html页面。实际上我们是需要拉取的是文件的实际路径。

解决方法:
点击右上角的原始数据即可查看对应的文件存储位置。
在这里插入图片描述
在这里插入图片描述
在maven中使用正确的url即可。

pluginManagement {
    repositories {
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
        maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
    }
}