Android_Maven仓库篇——Android Studio使用compile依赖自己的资源

  • 几个月没有写作了,也忙也懒。安卓的技术世界日新月异,去年还在为兼容 2.3 而苦恼,今年开发便直接上了 api – 17。同时涌现出了一大波新技术:插件化、组件化等等等等,本篇也算是插件化组件化的最基础篇章吧。

  • Maven 仓库并非是安卓独有的,之所以在标题上有 Android 字样是因为本篇是基于 Android Studio 及 安卓项目 的试验,并不适用于其他的很多环境。

  • 本篇我们就不为大家普及 maven 仓库的基础知识了,不了解的童鞋请自行找度娘;另外一定注意 git 仓库与 maven 仓库的区别,二者是不同的。

  • 我们使用 Android Studio 构建安卓项目时候,少不了引用官方 sdk 或者他人的库,方法都是在 module 的 build.gradle 文件中添加类似代码:compile ‘com.android.support:appcompat-v7:26.+’;这行神奇的代码就把我们想使用的库引入到了项目中来。然而一般情况下我们引入自己的 module 却必须把它放在当前的 project 节点下,并使用这样的类似代码:compile project(‘:ICUtils:richeditor’);这就异常蛋疼了,如果项目足够大、协作的同事很多,那大家都在同一个项目目录下编写代码,既不优雅也不安全。

  • 假如我们也只需要在 build.gradle 文件中使用一行 compile 代码就能实现引入自己或同事的 module 模块,而不需要关心这个 module 放在哪里,那岂不是很开心。有的童鞋可能说这不是闲的蛋疼么,非也!这样做好处多多:对于项目模块之间的解耦、同事间协作的便利性都是极好的。而且如果项目分模块的话,不久可以每个同事各写自己的 module,最终引入到 appModule 中了么,这便是模块化技术了。各位朋友看到这是不是有兴趣了呢?

目录

1、构建本地 maven 仓库
2、构建远程 maven 仓库
2.1、使用本地 maven 仓库 + git 的方式(基于 github、码云等第三方网站)
2.2、使用自己搭建的 maven 私服(基于nexus工具)

1. 构建本地 maven 仓库

使用 Android Studio 新建安卓工程 new -> project,选择 empty Activity,等待项目构建;

工程建好后,new -> module : toastmodule,名字随便取。

在 toastmodule 中新建 java文件 ToastUtil,并编写代码:

public class ToastUtil {
    public static void toast(Context context, String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }
}

打开 toastmodule 的 build.gradle 文件,添加代码:

apply plugin: 'maven'   // 由于Android Studio 自带有 maven 插件,所以我们并不需要再额外安装配置 maven,比 java 工程师简化了不少操作

def MAVEN_REPOSITORY_PATH = 'file:///C:/ide/work_space/repo/'
def GROUP_ID = 'com.gitee.ynheng'
def ARTIFACT_ID = 'ToastMoudle'
def VERSION_NAME = '0.0.1'
def PACKAGE_TYPE = 'aar'

uploadArchives{
    repositories{
        mavenDeployer{
            repository(url:MAVEN_REPOSITORY_PATH)
            pom.project{
                groupId GROUP_ID
                artifactId ARTIFACT_ID
                version VERSION_NAME
                packaging PACKAGE_TYPE
            }
        }
    }
}

注意 groupId + artifactId + version 就是我们以后要使用的compile后的代码,也不难理解,这里就不做介绍了,如果实在理解不了就把它当作一种索引。

打开 studio 下方的 Terminal,输入命令:

gradlew uploadArchives //然后敲击回车

第一次跑由于需要加载许多 maven 的插件会慢一点,以后再跑就快了;直至 Terminal 中出现

BUILD SUCCESSFUL

说明我们部署成功了,可以打开我们所设置的 MAVEN_REPOSITORY_PATH 去查看 maven部署 的结果。

《Android_Maven仓库篇——Android Studio使用compile依赖自己的资源》 本地仓库

这个时候我们就可以引用我们自己的这个库了,在 project节点的 build.gradle 文件中编写代码:

allprojects {
    repositories {
        //添加在此
        maven { url 'file:///C:/ide/work_space/repo/' }
    }
}

在 appModule 的 build.gradle 文件中编写代码:

dependencies {
    //添加在此
    compile 'com.gitee.ynheng:ToastMoudle:0.0.1'
}

sync 跑一下,打开 appModule 的 MainActivity 文件,在 onCreate() 方法中编写代码:

ToastUtil.toast(this,"it can use");

此时我们发现没有报错,这说明我们的 compile代码起作用了,ToastUtil这个类可以正常引用。

(其实我们当前试验的这个 toastmodule 是可以放在任何地方的,我只是便于代码编写所有放在了当前 project 下)

2. 构建远程 maven 仓库

我只总结了以下两种方式,当然你也可以上传到公共的 mavenCenter 或 jCenter 或 其他提供有maven仓库的平台去,
但鉴于国内的网络特点,这里就只尝试了这两种速度快且便捷的方法。

2.1、使用本地maven仓库 + git的方式(基于github、码云等第三方网站)

在第1步中构建本地仓库成功的前提下,在github上new Repository,

我new好的仓库路径是:https://github.com/ynheng/MavenRepo.git

然后打开我们的本地仓库的目录,右键点击空白处(确定你安装的有git) -> Git Bash Here 打开git命令行,依次输入:

    git init
    git add .
    git commit -m 'init repo and add all files'
    git remote add origin https://github.com/ynheng/MavenRepo.git
    git push origin master

每输入一行就回车一次,也许会要求输入账户及密码,如果有其他错误请自行解决,本篇的重点并非是介绍 git 操作,
当然你也可以使用图形化的 git 工具(如 sourceTree)

《Android_Maven仓库篇——Android Studio使用compile依赖自己的资源》 经上传后的github项目

然后我们需要更改的地方在 project 的 build.gradle 文件中改动代码:

allprojects {
    repositories {
        //改动在此
        maven { url 'https://raw.githubusercontent.com/ynheng/MavenRepo/master/' }
    }
}

如果你使用的是码云gitee.com,则是类似的maven-url是:

https://gitee.com/ynheng/MavenRepo/raw/master/

注意使用码云时不要用 private Repository,本人试验未成功(猜想是raw地址套路不同,但是不知道是什么套路啊),
如果有哪位同仁成功使用 private Repository 做maven仓库的话还请不吝赐教。

github及码云的 raw-url 的套路大家一看基本就明白了,在此不再赘述。
之所以我git直接push就可成功,是因为我在 git 仓库的设置中配置了 ssh 公钥,具体生成及设置公钥的方法请浏览
http://git.mydoc.io/?t=154712

2.2、使用自己搭建的 maven 私服(基于nexus工具)

搭建maven私服有多种方式(例如JFrog的Artifactory、sonatype社区的nexus),本篇我们使用nexus来尝试一把,下载路径:

https://www.sonatype.com/download-oss-sonatype

这里下载的是Nexus Repository Manager OSS 3.x版本,把压缩包解压到你合适的路径,打开路径:

\nexus-3.6.0-02-win64\nexus-3.6.0-02\bin

按住shift键的同时右键单击空白处,选择”在此处打开PowerShell窗口”(我的是最新win10,旧win或许是打开命令行窗口);输入 :

nexus.exe /run //然后回车(直接双击运行是不起作用的)

待命令行中出现如下标识的时候就说明启动成功

-------------------------------------------------
Started Sonatype Nexus OSS 3.6.0-02
-------------------------------------------------

注意:在启动成功后命令行窗口不能关闭,必须保证这个命令行窗口一直是开启状态,否则Nexus也就关闭了。

打开浏览器,在地址栏输入 locahost:8081 ,然后回车

《Android_Maven仓库篇——Android Studio使用compile依赖自己的资源》 nexus仓库loading图

进入nexus页面后,点击右上角的Sign in,输入初始默认账户:admin,初始默认密码:admin123,回车

登陆后点击页面最上方的齿轮图标,然后再点击Repositories,可以看到目前所有的仓库列表,

《Android_Maven仓库篇——Android Studio使用compile依赖自己的资源》 仓库列表

带文件夹图案的是仓库组,像原油桶一样的图案是仓库,点击一个你想用的仓库就可查看到仓库详情:

《Android_Maven仓库篇——Android Studio使用compile依赖自己的资源》 点击某个仓库进入

复制红色箭头指出的URL,把它设置为部署地址,也就是 MAVEN_REPOSITORY_PATH,然后我们再跑一遍命令行(gradlew uploadArchives),直至命令行中出现令人喜爱的:

BUILD SUCCESSFUL

这个时候,把 project 节点下的 build.gradle 修改为

allprojects {
    repositories {
        //改动在此
        maven { url '' } //引号内的地址改为那个URL - MAVEN_REPOSITORY_PATH
    }
}

OK,至此我们本地仓库和两种远程仓库的用法都介绍完了,就是这么简单有木有,大功告成!

安卓开发交流:

《Android_Maven仓库篇——Android Studio使用compile依赖自己的资源》 有兴趣一起学习的朋友,请加Q群:76161364

    原文作者:鱼满楼
    原文地址: https://www.jianshu.com/p/6f6405fee0b5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞