饿了么Android插件化开发实践(一)

作者:JerryXia | 发表于 , 阅读 (0)

痛点随着饿了么APP业务急速的发展,项目组内部各个模块的业务越来越多,同时其他项目组也有在主APP集成的需求,现行的Single Code Repo越来越不适合项目的推进。
团队内部需求目前饿了么APP是基于业务分成Shopping、Booking、Order、Account、Marketing和Application六个模块,每个模块由相关的开发人员进行负责。APP方法数早就超过了65k,最新发布的5.9.0版本方法数已经到达了85k。
业务量比较复杂,六个模块一共占去了30k
为了避免开发中出现大量的boilerplate code,写了很多工具,在compile time auto generate code
业务之外,项目中也依赖了很多团队各位小伙伴写的给力库,比如图片解析、HotFix、ORM
同时团队对开源也比较活跃,使用了一些很赞的library,如retrofit、RxJava、OkHttp
再加上庞大的Android Support Library
方法数越来越大,codebase也越来越庞大。快速的发版周期,codebase只会越来越庞大,这时来自...阅读全文

突破微信跳转限制-Universal Links那些坑

作者:JerryXia | 发表于 , 阅读 (0)

微信屏蔽了在其内部webview中大部分URL Scheme跳转(除了一个白名单比如点评),目前突破这个限制有两种方案
WXAppExtendObject: 这个用法自查Universal Links: 文档在这里,工作原理,如何实现,直接参考官方文档即可但是我们按照文档支持了Universal Links,却在iOS9.2开始发现不work了,那么下面开始尝试解决问题
App Search API Validation Toolapple官方有出一个工具-App Search API Validation Tool,这个工具可以测试网站对iOS9 search API的支持,其中包括了对Universal Links的配置检查
但是这个工具对我们网站检查的结果是 passed
iOS端表现分析iOS 9.2开始具体变现如下:
Safari中点击符合条件的Link,没有跳转App,但是长按链接能弹出用饿了么打开链接的选项信息app内点击指定Link,works微信中打开对应的web,点击符合条件的Link,没有跳转App看起来iOS 9.2肯定是有修改相关的机制,但是Ap...阅读全文

ReactiveCocoa实践

作者:JerryXia | 发表于 , 阅读 (0)

ReactiveCocoa(以下简称RAC)是iOS上函数响应式编程(Functional Reactive Programming,FRP)的框架,这个和我们平时面向对象(OOP)的编程方式有挺大的区别。本文通过在项目中使用RAC来实现一个小功能,让大家了解一下RAC。
Introduction有一个需求,在搜索页搜索时,需要先判断输入内容是否合法(2个字符以上),同时需要500毫秒的延迟,减少用户输入过程中频繁发起请求。这个功能非常适合用RAC来实现。FRP的核心是信号(signal),而输入框文本变化实质是一种信号,我们可以通过对信号的处理来完成这个功能。
SignalRAC中最核心的类RACSignal,是一系列可以被监测的数据流。
信号类(RACSignal),只是表示当数据改变时,信号内部会发出数据.默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。如何订阅信号:调用信号RACSignal的subscribeNext就能订阅。一个简单例子:
RACSignalRACSignal *signal = ...阅读全文

Amigo---Android hotfix terminator

作者:JerryXia | 发表于 , 阅读 (0)
Amigo  
An old Chinese saying goes: Road to Jane
古人有云:大道至简
so…
RTFCAmigohas opened source code in github, so everyone has access to it;
and we use Apache License v2.0 as amigo’s license, so everyone can use & modify it.
usageclasspath 'me.ele:amigo:0.0.3'...apply plugin: 'me.ele.amigo'...you are good to go now, as simple as this.
if you don’t need hotfix work immediatelyyou just need to download new apk file to /data/data/{your pkg}/files/amigo/demo.apk,when app restarts next time, hotfix...阅读全文

浅谈Mantle

作者:JerryXia | 发表于 , 阅读 (0)

使用Mantle也差不多一年,使用期间总算积累了一些经验,在此不吝献丑,或能有益于人;由于是一些知识点的汇总,难免芜杂,见谅!所有索引都随文给出,不另外附录;建议核心部分,结合代码理解。
解析过程Mantle的核心类是MTLJSONAdapter,负责整个解析。下面以JSON To Object为例粗略介绍一下。相关代码见此
- (id)modelFromJSONDictionary:(NSDictionary *)JSONDictionary error:(NSError **)error {// 开始 处理由一堆相关的class来map同一类字典,少见,可忽略,为了结构清晰,删除了这部分代码// 结束 处理由一堆相关的class来map同一类字典,少见,可忽略// 开始 常规的解析流程 NSMutableDictionary *dictionaryValue = [[NSMutableDictionary alloc] initWithCapacity:JSONDictionary.count]; for (NSString *propertyKey in [self.mo...阅读全文