Android开发技术周报 Issue#98

lylianko 8年前
   <h3><strong>新闻</strong></h3>    <ol>     <li> <p><a href="/misc/goto?guid=4959716552592739479" rel="nofollow,noindex">Android Studio 2.2发布:改进平台支持 速度提升更智能</a></p> </li>     <li> <p><a href="/misc/goto?guid=4959716552679348843" rel="nofollow,noindex">Nexus 5非官方吃上Android 7.0 Nougat</a></p> </li>     <li> <p><a href="/misc/goto?guid=4959716552763233676" rel="nofollow,noindex">Google Pixel新机可能允许双安卓系统启动</a></p> </li>    </ol>    <h3><strong>教程</strong></h3>    <ol>     <li> <p><a href="/misc/goto?guid=4959716552846544873" rel="nofollow,noindex">C++11学习</a></p> <p>当Android用ART虚拟机替代Dalvik的时候,为了表示和Dalvik彻底划清界限的决心,Google连ART虚拟机的实现代码都切换到了C++11。C+11的标准规范于2011年2月正式落稿,而此前10余年间,C++正式标准一直是C++98/03[①]。相比C++98/03,C++11有了非常多的变化,甚至一度让笔者大呼不认识C++了[②]。不过,作为科技行业的从业者,我们要铭记在心的一个铁规就是要拥抱变化。既然我们不认识C++11,那就把它当做一门全新的语言来学习吧。</p> </li>     <li> <p><a href="/misc/goto?guid=4959716552932175997" rel="nofollow,noindex">推送 从入门到放弃</a></p> <p>推送简直就是一种轻量级的骚扰方式自从有了推送,各个公司基本上都在使用推送,这确实是一个比较好的提醒方式,Android较iOS强的一个部分,也就是在于Android的Notification。Google教育我们利用好Android的通知模块,做更多友好的交互,可这句话,翻译成中文,不知不觉,就变成了在Notification中推送各种广告,而且仅仅就是一些广告,Notification各种牛逼的功能,完全不需要,这也违背了Google设计Notification的初衷。更关键的是,现在随便找一款App,没有推送的真是凤毛麟角,更可恶的是,做外卖的App给我推送奥运新闻,一条新闻十几个App推送,以至于现在很多用户都非常反感各种推送广告,就我本人而言,基本上会禁用所有广告类的App的推送。</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553019018183" rel="nofollow,noindex">Android LowMemoryKiller原理分析</a></p> <p>Android的设计理念之一,便是应用程序退出,但进程还会继续存在系统以便再次启动时提高响应时间. 这样的设计会带来一个问题, 每个进程都有自己独立的内存地址空间,随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足, 那么需要一个能管理所有进程,根据一定策略来释放进程的策略,这便有了lmk,全称为LowMemoryKiller(低内存杀手),lmkd来决定什么时间杀掉什么进程.</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553103303021" rel="nofollow,noindex">拆轮子系列:拆 RxJava</a></p> <p>RxJava 这个项目已经持续四年半了,第一个 commit 是在 2012 年 3 月 18 号。我从 14 年 11 月份开始使用 RxJava,应该算是比较早的,将近两年过去了,现在 RxJava 1.x 版本已经进入稳定期,2.0 版本也已经进入了 RC 阶段。原本打算把 Advanced RxJava 系列博客翻译完之后再拆 RxJava 的,但是前两周看了一个 JW 讲 RxJava 的视频,突然有种隐隐打通任督二脉的感觉,索性趁着中秋佳节,一鼓作气把 RxJava 好好拆开看个究竟。本文的分析基于 RxJava 截至 2016.9.16 的最新源码,非常建议大家下载 RxJava 源码之后,跟着本文,过一遍源码</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553184898246" rel="nofollow,noindex">Android热更新方案Robust</a></p> <p>从去年开始,Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa、Tinker等;另一类就是native hook方案,如阿里开源的Andfix和Dexposed。这样客户端也有了实时修复线上问题的可能。但经过调研之后,我们发现上述方案或多或少都有一些问题,基于native hook的方案:需要针对dalvik虚拟机和art虚拟机做适配,需要考虑指令集的兼容问题,需要native代码支持,兼容性上会有一定的影响;基于Multidex的方案,需要反射更改DexElements,改变Dex的加载顺序,这使得patch需要在下次启动时才能生效,实时性就受到了影响,同时这种方案在android N [speed-profile]编译模式下可能会有问题,可以参考Android N混合编译与对热补丁影响解析。考虑到美团Android用户机型分布的碎片化,很难有一个方案能覆盖所有机型。</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553270958755" rel="nofollow,noindex">安卓自定义View进阶-Matrix Camera</a></p> <p>本篇依旧属于Matrix,主要讲解Camera,Android下有很多相机应用,其中的美颜相机更是不少,不过今天这个Camera可不是我们平时拍照的那个相机,而是graphic包下的Camera,专业给View拍照的相机,不过既然是相机,作用都是类似的,主要是将3D的内容拍扁变成2D的内容。众所周知,我们的手机屏幕是一个2D的平面,所以也没办法直接显示3D的信息,因此我们看到的所有3D效果都是3D在2D平面的投影而已,而本文中的Camera主要作用就是这个,将3D信息转换为2D平面上的投影,实际上这个类更像是一个操作Matrix的工具类,使用Camera和Matrix可以在不使用OpenGL的情况下制作出简单的3D效果。</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553359390183" rel="nofollow,noindex">那些你不知道的APK 瘦身,让你的APK更小</a></p> <p>让我们的apk文件尽可能更小,移除那些未使用的代码和资源文件。本章节介绍了如何做到让APK更小,性能更好,下载转化率会更高,以及如何指定在构建APK过程中保留或移除项目中的代码和资源,在我们还没有分析APK大小之前,项目中存在一些资源放置处理不当,没有统一的规范,依赖管理不合理,资源重叠,dex方法数过多、文件过大等问题,导致整个APK文件也比较大,对于下载转化率必然有一定的影响。那么公司要求我们的产品APK体积大小要优化到3M左右。经过我们的努力终于达到要求,然而我们发现还能再小。</p> </li>    </ol>    <h3><strong>开源库&项目</strong></h3>    <ol>     <li> <p><a href="/misc/goto?guid=4959716553449386856" rel="nofollow,noindex">AnoleFix</a></p> <p>Another hotfix 另一个热修复方案 Alpha,来自InstantRun 和 Robust 类似</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553533569862" rel="nofollow,noindex">TapTargetView</a></p> <p>Material Design 风格的使用指南提示效果</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553620380115" rel="nofollow,noindex">Qart</a></p> <p>一个可以将图片和二维码合并成一张带有图片内容的二维码的库</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553708640303" rel="nofollow,noindex">LowPoly</a></p> <p>一个可以将图片转换为 Lowpoly 风格的库</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553792088457" rel="nofollow,noindex">StylishMusicPlayer</a></p> <p>一款优雅时尚的 Android 播放器</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553870550157" rel="nofollow,noindex">DrawableColorChange</a></p> <p>可以通过代码动态改变 Drawable 颜色的库</p> </li>     <li> <p><a href="/misc/goto?guid=4959716553958097801" rel="nofollow,noindex">java-error-handler</a></p> <p>Error handling library for Android and Java</p> </li>     <li> <p><a href="/misc/goto?guid=4959716554045055208" rel="nofollow,noindex">DoubleStickyHeadersList</a></p> <p>An Android library for double level section headers that stick to the top of list</p> </li>     <li> <p><a href="/misc/goto?guid=4959716554129266299" rel="nofollow,noindex">fingerlock</a></p> <p>FingerLock is a library designed to make fingerprint authentication an easy task for Android developers</p> </li>     <li> <p><a href="/misc/goto?guid=4959716554206354752" rel="nofollow,noindex">AndroidAudioConverter</a></p> <p>一个音频格式转换库,支持 AAC, MP3, M4A, WMA, WAV、FLAC 等格式</p> </li>     <li> <p><a href="/misc/goto?guid=4959716554289600156" rel="nofollow,noindex">GoogleClock</a></p> <p>仿Google 2016 I/O大会里那个炫酷的时钟,纯SVG动画</p> </li>     <li> <p><a href="/misc/goto?guid=4959716554375103769" rel="nofollow,noindex">CreditSesameRingView</a></p> <p>Imitation of Ali credit sesame new old ring view</p> </li>     <li> <p><a href="/misc/goto?guid=4959716554461603557" rel="nofollow,noindex">OhMyBiliBili</a></p> <p>高仿哔哩哔哩动画安卓客户端 - ( ゜- ゜)つロ 乾杯~</p> </li>     <li> <p><a href="/misc/goto?guid=4959716554546659848" rel="nofollow,noindex">UniqueAdapter</a></p> <p><a href="/misc/goto?guid=4959716554628110584" rel="nofollow,noindex">借助DataBinding,只需要一个Adapter</a></p> </li>    </ol>    <h3> </h3>    <p> </p>    <p>来自:http://www.androidweekly.cn/android-dev-weekly-issue-98/</p>    <p> </p>