记一次实现远程依赖的收获(模块化开发)

      最近项目里面用到了模块化开发,按照对应功能点划分模块开发,每一个功能都是一个module,由于接手的代码相对有点杂乱,维护以及迭代非常难过,所以跟公司申请时间重构,但是公司为了眼前利益赶项目,并没有搭理我,没办法,只能利用自己空余时间一个一个功能点慢慢重构了,这也就当是自己的一个收获了吧。首先,我是拿常见的第三方登陆和分享试手的,好了,进入正题。

    首先,我用的mob的sharesdk(mob现在被游族网络收购了,这个是为数不多的还在维护更新的sdk),现在官网推荐我们的集成方式是用AndroidStudio自带的gradle去自动编译。步骤很简单,就两个步骤,第一步在新建工程的app目录下面的bulid.gradle中添加需要集成的平台信息:

效果图

并在头部加上 apply plugin:'com.mob.sdk';否则编译不过。

    然后,在整个工程的外部bulid.gradle中添加如下信息:

效果图

MobSDK的版本号不要轻易修改(除非你知道最新的版本具体的版本号)。

至此,我们就可以写功能代码了,这一块我就忽略了,一个简单的登陆分享demo就做完了。但是正如我上文所说的,我现在是模块化开发,我需要把登陆分享的功能做成一个library,我最终的目标是想把登陆分享的功能封装成github上面的一个远程依赖库,可能有人会问,封装成依赖库,那要是项目里面功能需求变了,整个依赖不都要修改吗?是的,确实是这样的,依赖库的代码是不可编辑的,我想到的解决办法是对应改需求的话,我就对应新建一个项目专属的分支呗,每个分支维护不同工程的不同版本,虽然好像听起来有点扯,但是目前这是我想到的最好的办法,总比每个工程重新接入mob要好得多。

    如果想把代码变成一个远程的依赖,首先要把核心的代码全部封装起来,对外部来说只提供调用的方法,最多的话就是方便处理业务逻辑把登陆分享的回调传递到外层,当然,这里不能直接用sdk的回调了,需要自己写一个接口回调,因为外部的类是没有办法引用sdk相关代码的,因为sdk相关的代码全部被封装起来了,如果,外部可以继续使用sdk的代码,那我们封装的意义何在呢?

    好了,下面就把刚刚创建的登陆分享的demo(下面简称demo),变成另一个工程的library,新建一个工程导入一个module,具体步骤忽略,这个时候就有一个问题了,因为demo的编译方式是靠外层的bulid.gradle,demo作为library被导入一个新的工程的时候,外层的bulid.gradle是没法导入,这个时候编译报错,找不到对应的sdk,这个问题怎么解决呢,当时这个问题我搞了两天,幸好我没放弃,我首先想到的办法是直接下载对应的jar包,放到library的libs文件夹下面,mob官网打开的时候,竟然不能下载jar包,直接弹出弹窗给出了自动编译的方式,这种方式我只好放弃了,因为官网不支持了,官网强烈推荐自动编译的方式。即使我可以从之前的工程里面把对应的jar包掏出来,但是sdk实时更新的好处就没有了,这相当于是走了回头路了,这是不可取的。后来我想到demo的编译方式,直接在新工程的外层bulid.gradle添加demo同样的classpath,确实编译成功了,并且library里面的sharesdk相关的类和方法都可以引用了,正当我开心的插上测试机运行的时候,问题出来了,这个时候报错,build失败,找不到对应的sdk版本。如果找不到对应的sdk,那么为什么library里面引用类和方法没有报错呢?既然可以使用代码,为什么整个工程运行报错呢?第一次遇到这个问题,我把我身边的资源全都问了一遍,但是都没有解决这个问题,我后来想这个肯定跟mob的外层的bulid.gradle编译有关,因为如果不是这种方式,对应的不会有这种问题,所以我只能向mob技术支持请求帮助,其实很多时候你会发现,问题或者报错本身倒是没什么,如果遇到过,可能就是一句代码的事,真正难的是描述这个问题,怎么把这个问题描述清楚,就比如我遇到的这个问题,我花了半个小时才让他明白了我的意思。在和他描述的同时,我去搜索了mob上面的报错集合,突然一条回复让我一惊,在新建工程的内部bulid.gradle里面也需要在头部添加 apply plugin:'com.mob.sdk';我还在编译的时候,技术支持给我发来了同样的解决办法,哈哈,几分钟之后编译成功,可以正常运行了。到这里离我想要的目标实现了一半,登陆分享的功能已经被封装成了一个library了,接下来我想把对应的代码生成一个远程依赖,具体操作忽略(https://jitpack.io)。在项目里面里面引入github项目生成的一个链接,编译成功,结下来就是写代码测试了,运行测试,发现所有的登陆分享全部报错(前提包名正确并且签名打包的),对应的报错信息是appKey 缺失,就是被封装的代码(包括平台相关信息都是放在bulid.gradle中)里面的信息拿不到,但是如果不是远程依赖的话,直接library引入是可以正常调起三方使用的。后来我大概查了一下资料,生成远程依赖的代码的bulid.gradle里面的信息是完全封闭的,这也和代码封装的理念相通,所有引用这个依赖的工程无法访问里面的appKey等第三方信息,至此,发现生成远程依赖库的想法彻底被推翻,但是通过这个功能点整理,最起码把整个流程梳理了一下,因为这里的mob登陆分享比较特殊,如果是常规功能封装成远程依赖的话还是可以的。

    好了,至此,本文就结束了,希望可以给遇到同样问题的朋友一点思路!

    附录 github地址:https://github.com/lifeng19930608/ShareAndLogin

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • 不怕跌倒,所以飞翔 组件化开发 参考资源 Android组件化方案 为什么要组件化开发 解决问题 实际业务变化非常...
    笔墨Android阅读 2,982评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,101评论 1 32
  • 1. Android组件化开发 在Android项目组件化之前,我们的项目都是像下图那样,一个单一工程下,根据不同...
    CHSmile阅读 4,534评论 1 34
  • 在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发。 以下高能,请做好心理准备,看不...
    涅槃1992阅读 4,151评论 11 66
  • 近段时间有机会接触到iOS开发,但是光Xcode上配置证书,描述文件,上真机调试等就费了挺大劲。结合看到很多And...
    锦葛格阅读 3,828评论 0 1