这段时间在项目中做了一些感觉不错的模块化功能,然后又看见代码有些冗余,就想做成依赖库,模块化。使用起来更方便。

接下来,就搜人家是怎么做的,这俩天试了很多,产生了一些依赖库冲突问题,搜索到高票博客上基本都只是简单的写了流程,很大一部分都没说明,会产生的依赖库冲突问题。那我就记录下遇到的依赖库冲突问题,并给出一些解决方案。

好了,进入正题,我们先完整的跑一遍发布依赖库流程。

首先,我们先测试下github是否能连通。点下“test”,显示“Connection successful”,说明连接github没问题。

android studio 如何让一个依赖整个工程都可以用_调用

接下来,新建一个项目,设置好项目,包名这些,然后全部next就行了。

android studio 如何让一个依赖整个工程都可以用_调用_02

新建完项目后,我们需要建一个库,这就是我们需要用到的依赖库,建库的选项,参照下图。

android studio 如何让一个依赖整个工程都可以用_调用_03

点了“Module”后,会进入下图,选择“Android Library”

android studio 如何让一个依赖整个工程都可以用_坑_04

依赖库也是有包名,修改下面信息为你所满意的信息,点“Finish”就行了

android studio 如何让一个依赖整个工程都可以用_Android_05

建完库后,是下面的文件结构

android studio 如何让一个依赖整个工程都可以用_调用_06

1.坑点所在

在上传之前,我们修改下,库的gradle代码,将“implementation”改成“compileOnly”,这个是解决冲突的一个较好的途径,解决这个冲突,如果不修改,这地方可能会产生冲突,也可能不会产生项目(我在公司的项目里不修改直接引用就会产生冲突,新建项目引用就没有产生冲突,牛批。但是建议最好修改下),据我所知有俩个办法:

1.这里可以看见appcompat是v7:28.0.0,说明targetSdkVersion 是28,这要求我们的引用项目的targetSdkVersion 也改成28,这样做确实能解决问题,亲测可以。但是,测试中可以这样解决,生产中要是你有多个依赖库targetSdkVersion都不一样,那你就没辙了

2.库的gradle代码,将“implementation”改成“compileOnly”。

引用依赖库,AS会自动合并你的gradle和AndroidManifest.xml,当依赖库和你的项目targetSDK不一样,合并的时候会产生依赖冲突。使用“compileOnly”说明这个依赖库只参与编译,代码中可以引用依赖库中的相关方法,不参与打包。

比如:如果你在你的依赖库中,使用compileOnly引用了OkHttp这个依赖库的话,依赖库中使用OkHttp方法,实例其中的对象,都是可以的。当别人引用了你的依赖库,必须在gradle(app)中使用implementation引用OkHttp这个依赖库,如果不引用的话,在你的依赖库中那些使用OkHttp的地方全部爆红,编译过不了的。这样可以确保只存在一个依赖库,不会冲突。

之前也可以用“provided”,但是Google已经不赞成使用了,那我们就使用“compileOnly”。

android studio 如何让一个依赖整个工程都可以用_调用_07

在库里写个简单的方法,建个“MyFunction”类,写个“showToast”方法,弹出信息。

android studio 如何让一个依赖整个工程都可以用_Android_08

我们也可以在本地,引用我们建的依赖库(这个不是重点,在这里备忘下)

1.把整个module库文件夹复制到工程的根目录

2.在工程的settings.gradle中增加对module的引用。

  由include ‘:app’变成include ‘:app’, ‘:ytaolibrary’

3.在工程的主module (Module: app)中增加对库module的引用 
  
  implementation project(path: ':ytaolibrary')

现在,我们将我们的依赖库上传到github上,选择“Share Project On GitHub”

android studio 如何让一个依赖整个工程都可以用_依赖库冲突_09

填完信息,点下分享就行了

android studio 如何让一个依赖整个工程都可以用_坑_10

这里我们选择“app”和不选择“app”都可以,“YTAOLibrary”和“ytaolibrary”都是需要选的。

android studio 如何让一个依赖整个工程都可以用_调用_11

android studio 如何让一个依赖整个工程都可以用_Android_12

 

这样就上传成功了,如果之前没上传过,会弹出填写“账号”,“密码”对话框,填下github的账号密码就行了

android studio 如何让一个依赖整个工程都可以用_Android_13

我们上传到github上面的项目,选择“releases”

android studio 如何让一个依赖整个工程都可以用_Android_14

选择“Create a new release”

android studio 如何让一个依赖整个工程都可以用_调用_15

填写完信息,选择“Publish release”提交

android studio 如何让一个依赖整个工程都可以用_Android_16

接下来,我们进入 https://jitpack.io JitPack网站,先复制下我们的项目链接

android studio 如何让一个依赖整个工程都可以用_Android_17

进入jitpack一般会自动提示绑定github,很智能。我们将复制的网址贴贴到“Look Up”前,点击“Look Up”会刷出“Version”

点击“Get it”,然后就可以了

android studio 如何让一个依赖整个工程都可以用_坑_18

 

2.小坑点(JitPack所给的俩个配置,一定要在相应地方写对)

OK,这样我们就能引用了。记住maven的依赖是“allprojects”下的“repositories”中。

android studio 如何让一个依赖整个工程都可以用_Android_19

 

最后测一下:添加依赖库;调用下依赖库里面的方法

android studio 如何让一个依赖整个工程都可以用_依赖库冲突_20

android studio 如何让一个依赖整个工程都可以用_Android_21

真机上跑一下程序,可以看到,弹出了toast,依赖库里面的方法成功调用了

android studio 如何让一个依赖整个工程都可以用_调用_22

总结:编译环境:Android Studio 3.2.0; 真机:小米;文章中的依赖库项目,和最后的调用依赖库项目,均是新建项目,我写这篇文章,也是跑了一套完整的流程。到最后的运行,没报依赖库冲突的错误。相信大家完整的照着文章流程跑一遍,也会没问题的。

3.密集坑点说明加解决

大家引用依赖库,可能因为依赖库的原因会产生各种依赖库冲突错误,我在这里整理了解决的方法

3.1 修改自己项目的AndroidManifest.xml文件

在manifest里加这句:xmlns:tools="http://schemas.android.com/tools"

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package=".........">

在application里加上这句:tools:replace="android:allowBackup,  android:theme, android:icon"

<application
        ...
        tools:replace="android:allowBackup,  android:theme, android:icon">

3.2 修改自己库里面“Module:app”一些配置

3.3 如果你做了俩个依赖库,切记依赖库的的包名不能一样,不然你同时引用俩个依赖库会产生冲突.