平安科技移动开发二队技术周报(第二十三期)
@author ASCE1885的 Github 微博 CSDN
业界新闻
1)Google开源Brotli压缩算法
谷歌非常重视互联网用户的体验,而提升网页加载速度是提升用户体验的一种重要方式。两年前,他们发布了Zotfli压缩算法。该算法在默认设置下的输出比zlib的最大压缩比输出还要小3-8%。PNG优化器、Web内容预处理等许多压缩方案中都集成了该算法。基于该算法的应用情况,结合其它现代压缩需求,谷歌开发并开源了一个新的算法——Brotli压缩算法。
2)Android 6.0 源代码及 Nexus 设备工厂镜像发布
Google 已经 pushed Android 6.0 源代码 (注:墙)到 AOSP (Android Open Source Project), 并发布 factory images (MRA58K) 给 Nexus 6 & Nexus 5 智能手机, Nexus Player, 以及 Nexus 9 和 Nexus 7 (2013) 平板电脑。
3)苹果低调发布全新21.5英寸4K屏幕iMac
苹果公司刚刚更新了自己的iMac一体化电脑产品线,新加入了4K分辨率屏幕的21.5寸iMac产品,提升了原有iMac产品的配置,并更新了无线鼠标、键盘以及触控板等附件。
Android开发
1)专访DroidPlugin作者张勇:安卓黑科技是怎样炼成的
前段时间,奇虎360在Github上发布了一个Android开源项目DroidPlugin,这是一个实现动态加载的Android插件框架,可以免安装、免修改的运行第三方APK。一时间,它被誉为安卓黑科技,引起行业内的关注。
2)Android开发最佳实践
前段时间,Google公布了Android开发最佳实践的一系列课程,涉及到一些平时开发过程中应该保持的良好习惯以及如何使用最新的Android Design Support Library来快速实现官方推荐的Material Design样式的应用。
3)给 Android 开发者的 RxJava 详解
鉴于 RxJava 目前这种既火爆又神秘的现状,而我又在一年的使用过程中对 RxJava 有了一些理解,我决定写下这篇文章来对 RxJava 做一个相对详细的、针对 Android 开发者的介绍。
这篇文章的目的有两个:
- 给对 RxJava 感兴趣的人一些入门的指引
- 给正在使用 RxJava 但仍然心存疑惑的人一些更深入的解析
4)安装包立减1M--微信Android资源混淆打包工具
微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/welcome.png混淆为r/s/a.png),同时利用7z深度压缩,大大减少了安装包体积,同时也增加了逼格,提升了反破解难度。资源混淆工具大约是在2014年4月实现,并在微信5.4中使用,减少了大约1M的空间。然后在8月在公司内部开源,现以推广到QQ邮箱、QQ空间、手机管家等多个产品中使用。
5)React Native For Android 架构初探
Facebook 在2015.9.15发布了 React Native for Android,把JavaScript 开发技术扩展到了Android平台。React Native 让开发者使用 JavaScript 和 React 编写应用,利用相同的核心代码就可以创建 基于Web,iOS 和 Android 平台的原生应用。本文将浅析Android React的架构及相关基础知识。
iOS开发
1)iOS应用架构谈 本地持久化方案及动态部署
持久化方案对整个App架构的影响和网络层方案对整个架构的影响类似,一般都是导致整个项目耦合度高的罪魁祸首。而我也是一如既往的去Model化的实践者,在持久层去Model化的过程中,我引入了Virtual Record的设计,这个在文中也会详细描述。
2)Swift 与众不同的地方
本文总结了Swift关键的基本概念。
3)自己动手写一个 iOS 网络请求库(五)——设置 SSL 钢钉
在我们调用 HTTPS 协议的时候,事先把 SSL 证书存到 App 本地,然后在每次请求的时候都进行一次验证,避免中间人攻击(Man-in-the-middle attack)。同时,这个功能也是我们使用自签名证书时候必须的,因为系统默认会拒绝我们自己签名的不受信任的证书,导致连接失败。
4)iOS App 的逆向工程: Hacking on Lyft
如果你曾经想要知道某一部分代码如何工作,或者很同情某些人程序里的 Bug,你要是有代码,通常可以看看那部分代码。但是,如果没有代码可怎么办? 在这个演讲里,Conrad 讲到了很多可以逆向 App 的概念和工具,这些方法和工具可以用来 debug 别人的库和你自己的代码。他还展示了逆向 iOS 版本的 Lyft (译者注:Lyft 是美国 Uber 之外的另一款打车软件),并且成功注入代码,探测网络流量,给我们活灵活现地展示逆向的艺术。通过 Conrad 的逆向技术,你也能成功地把 App Store 里所有的 App 的代码都暴露在你面前。
5)一种头像缓存策略
许多 App 都有用户系统,不论是自己实现还是使用第三方,大概都需要显示用户的头像。比较常见的情景下,头像会在某些列表里出现,例如联系人列表、消息列表等。虽然头像也是图像,但相比于普通图片,我们对头像有更高的要求。
技术纵横
1)基于webpack搭建前端工程解决方案探索
前端工程,最起码需要解决以下问题:
- 提供开发所需的一整套运行环境,这和IDE作用类似
- 资源管理,包括资源获取、依赖处理、实时更新、按需加载、公共模块管理等
- 打通研发链路的各个环节,debug、mock、proxy、test、build、deploy等
2)Google推出移动网页加速项目AMP
网页性能一直是网站、用户以及相关团体所关心的问题。近些年来,如何提升网页性能吸引了很多工程人员和研究人员的关注。每年,甚至都会有专门的会议来讨论该问题。然而,广大用户,尤其是移动客户端的用户,仍然会经常遇到网页加载速度过慢的情况。为了解决该问题,Google近期联合数十家技术机构和企业等推出了移动网页加速项目(Accelerated Mobile Pages, AMP)
3)Github 365天: 给你一年的时间,你会怎样去提高你的水平
尽管一直在Github上连击看上去似乎是没有多大必要的,但是人总得有点追求。如果正是漫无目的,却又想着提高技术的同时,为什么不去试试?毕竟技术非常好、不需要太多练习的人只是少数,似乎这样的人是不存在的。大多数的人都是经过练习之后,才会达到别人口中的“技术好”。
4)从输入 URL 到页面加载完成的过程中都发生了什么事情?
一道面试题所引申出来的知识点。
5)微博推荐架构的演进
在微博推荐发展的过程中遇到体系方向的变化、业务的不断更迭、目标的重新树立,其产品思路、架构以及算法也随之进行变迁。本文主要阐述在这个过程中推荐架构的演进,从产品目标、算法需求以及技术发展等维度为读者呈现一个完整的发展脉络,同时也希望通过这个机会跟大家一起探讨业务与技术的相互关系。
开源函数库与工具
1)浅入浅出Java Web
Java Web开发常见基础知识点总结。
2)react-native-viewpager
React native实现的viewpager组建,同时支持Android和iOS。
文末摄影鉴赏