文档章节

android模块化开发之aar——本地maven仓库发布和引用

veidy
 veidy
发布于 2017/07/10 14:45
字数 1302
阅读 773
收藏 7

在gradle 构建的android项目里面,有了一个爽得飞起的功能就是远程依赖。 如:我想引入okhttp 这个第三方开源网络请求框架,在eclipse开发时代,我们都是在github上要么把打包好的.jar文件下载下来导入,要么就是直接把源文件下载下来导入,一旦okhttp 在github有版本更新,我们又得进行同样的下载、导入工作。烦!在android studio 这么高大上的IDE出现之后,我们就只需一行代码搞定喽! 输入图片说明

如有版本更新,只需要更新版本号然后同步更新即可!简直不能再爽!既然这么好玩,那我们自己动手也玩一玩儿~通过android studio发布本地maven仓库,然后依赖导入项目!

第一步:创建一个moudle "aarlibrary"
第二步:maven发布到本地仓库
第三步:gradle 引入

第一步就不讲了,会开发android的都会 第二、三步是重点,如何在android studio 里面发布本地仓库?gradle 给我们提供了一个插件 “maven”!呵呵~ 好玩的来了,我们打开 aarlibrary 的build.gradle文件开始撸代码

输入图片说明

如上配置之后,我们会发布右侧的gradle 面板有变化:

输入图片说明

多了一个upload-uploadArchives!
离发布就只最后一步了:双击“uploadArchives” 直到稍等片刻就发布好啦~
注释里面已经定义仓库的地址是"file:///Users/veidy/Desktop/aar_/aar"找到本地文件夹发现有货啦!

输入图片说明

开始在app moudle引用:
两步操作:

第一步:在主项目的build.gradle里面引入仓库地址配置:

输入图片说明

第二步: 和其它包一样远程依赖:

输入图片说明

到这整个本地仓库的发布和引用就结束啦!然后就能愉快的引入aarlibrary里面的所有资源了~ 记住是所有资源,真的是所有资源!所有资源!所有资源!就算是aarlibrary 里面有远程依赖其它的aar 一样没问题!
假如在aarlibrary 里面有 远程依赖

compile 'com.squareup.okhttp3:okhttp:3.8.1'

如果像 android 开发之aar——本地文件引用 里面对aarlibrary进行打包然后导入到app moudle是找不到okhttp相关api的!但是如果以上面的形式发布到本地仓库然后依赖是没有问题的!


如果是从上一篇文章最后抛出的问题来看这篇文章的,到这才算"正文"了!

先理一下"aarlibrary里面也有依赖另外一个moudle 如:otherLibrary" 这里有三种情况:

第一种:otherLibrary打包成一个.aar文件然后直接以文件的形式被导入到了aarlibrary moudle的libs 文件夹:

输入图片说明

第二种:otherLibrary以项目moudle的形式被导入到aarlibrary:

输入图片说明

第三种:otherLibrary放在本地仓库或者仓库被导入到aarlibrary:

输入图片说明

对应第一种的解决办法:(又有三种情况)

一、如果你的app moudle的 build.gradle里面是以project的形式引用aarlibrary,可以如下解决: 先在aarlibrary 的build.gradle里面添加

repositories {
    flatDir {
        dirs 'libs' 
    }
}

然后在app moudle 的build.gradle 里面

repositories {
    flatDir {
        dirs 'libs','../aarlibrary/libs' 
    }
}

二、如果你的app moudle的build.gradle里面想以.aar文件形式引用aarlibrary,那不可能!就回到了NO.1这个问题

三、第二种情况不可能,那我们就可以用本文章的核心啊,发布本地仓库再依赖!但是,这里需要注意配置,否则,你会发现在远程依赖时失败~
上篇文章已经讲了怎么引用本地.aar文件:
先把otherlibrary-debug.aar文件放入aarlibrary的libs文件夹,然后在aarlibrary的build.gradle 的dependencies 里面新增下面配置: 输入图片说明

在这,如果我们想把aarlibrary发布到本地仓库,并在app moudle里面远程依赖,需要额外添加两个配置: 输入图片说明 定义group和version!

对应第二种的解决办法:

那就先把otherLibrary打包成.aar然后再引入到aarlibrary里面,再用上面的解决办法搞定~~哈哈哈

对应第三种的解决办法:

那就是本篇文章的核心,直接把aarlibrary整个moudle发布到本地仓库!


源码: https://git.oschina.net/veidy/aar.git

ps:如果照着文章撸的还是要注意一下,如果你的gradle版本太旧可能有些方法找不到,本文是基于gradle3.3版本撸的~


demo始终是demo,真正在项目中使用时会发现更多的问题
NO.2: 如标题“本地仓库引用”毕竟是本地,如果你们项目团队就你一个人那可以本地,反正是你自己一个人玩,但是如果不只一个人怎么办,难倒也要让别人都在本地创建一个仓库吗~~~显然不是! 怎么办?
看完下篇文章《android 开发之aar——远程仓库发布和引用》之后咱们再看这个问题~


最后贴一个二维码!注意不是求打赏的二维码,是本人撸了一个微信公众号!公众号会同步分享在osc上的所有文章!当然应该会有另外有趣的东西,有兴趣的可以扫描关注~

输入图片说明

© 著作权归作者所有

共有 人打赏支持
veidy

veidy

粉丝 130
博文 47
码字总数 18684
作品 0
深圳
程序员
从Android到React Native开发(四、打包流程解析和发布为Maven库)

1、从Android到React Native开发(一、入门) 2、从Android到React Native开发(二、通信与模块实现) 3、从Android到React Native开发(三、自定义原生控件支持)  作为失踪人口,本篇是对...

恋猫月亮
06/13
0
0
这恐怕是史上最简单的上传 AAR 教程

在做项目的时候,抽出来一些工具方法,然后做其他项目的时候需要使用,只是后就有将这些工具方法抽出来单独形成一个库的需求了。在 Android Studio 里就是 AAR。 因为我是个人开发,想到方便...

Jinux111
05/25
0
0
Android Studio创建Android Library发布至本地仓库

本文通过Android Studio创建一个Android Library项目,然后发布到本地的Maven仓库。 1.创建Android Library模块 2.配置build.gradle apply plugin: 'com.android.library'apply plugin: 'ma......

secondriver
2015/11/25
0
0
发布library到Maven仓库

发布library到Maven仓库 参考文章 https://github.com/xiaopansky/android-library-publish-to-jcenter/blob/master/README.md 发布library到Maven仓库----注册帐号等 将自己的开源项目提交到......

addcn
2016/01/22
410
0
如何制作一个android studio的aar依赖包

首先说明我使用的android studio 版本是0.4.因为现在android studio的bug还不较多,所以你的版本能不能正常使用我就不敢说了。 如果你只是单纯的想使用actionbarsherlock的话,引用是十分简单...

手绘灿烂
2014/01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
0
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
5
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
31
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部