Android开发技术周报 Issue#96

LavonneKoza 8年前
   <p><img src="https://simg.open-open.com/show/f929d462f8521cd36511059781828dbd.jpg"></p>    <h2><strong>教程</strong></h2>    <ol>     <li> <p><a href="/misc/goto?guid=4959714062576155628" rel="nofollow,noindex">浅析 Android 打包流程</a></p> <p>和一些同行交流的过程中发现部分朋友实际上对 Android 打包流程基本没有比较清晰完整的概念,所以本文主要聊一聊 Android 的打包流程,以及目前已有的或多或少可以与 Android 打包搭一点边的开源技术,互相学习。 更好的了解 Android 的打包流程,有助于我们做一些针对编译期的优化,包括但不限于提高打包速度(毕竟时间就是金钱,我的朋友),提高 Android 应用的 hack 难度增加安全性,减少 Android 安装包的体积,完成一些自动化的编码减少编码压力等。</p> </li>     <li> <p><a href="/misc/goto?guid=4959714062663935532" rel="nofollow,noindex">Android构建过程分析</a></p> <p>或许我们都知道Android构建会经历资源合并打包、源码编译、dex生成及打包签名等步骤,可是不是每个人对这些过程中发生的事情都了然于心呢?或许不然,于是带着好奇心开始了对Android gradle plugin的学习,现简要整理一下。如果项目引入了android support包,又或许依赖于其它第三方aar库,那构建前会将aar解压并与本地资源合并,这里的资源主要包括assets目录,res目录及Androidmanifest.xml。</p> </li>     <li> <p><a href="/misc/goto?guid=4959714062746396930" rel="nofollow,noindex">基于RxJava的一种MVP实现</a></p> <p>RxJava是一个实现Java响应式编程的库,让异步事件以序列的形式组织。MVP则通常用来将View业务层与Model层分离开来,两者结合起来可轻松实现业务解耦、线程控制、单元测试等等强大功能</p> </li>     <li> <p><a href="/misc/goto?guid=4959714062837690477" rel="nofollow,noindex">为什么图片反复压缩后会普遍会变绿而不是其他颜色?</a></p> <p>问题出在 Android 提供的压缩图片接口上,准确的说是一个 Android 里一个叫做 Skia 的库上。而这个 bug 在 2016 年 4 月中旬被修复了,如果按照 Android 的发行来看,那就是从 Android 7 (Nougat) 开始才消除这个问题。</p> </li>     <li> <p><a href="/misc/goto?guid=4959714062916096065" rel="nofollow,noindex">Android 专项测试之GPU测试探索</a></p> <p>我们在安卓上进行性能测试时,如果想获取CPU以及内存等常用性能指标,linux系统自身就提供了现成的方法,谷歌官方甚至公司内部也都提供了大量功能强大的分析工具。而相比之下,想要获取GPU的相关指标则没那么容易,甚至我们对GPU应该使用什么指标衡量都几乎一无所知。这一方面是由于系统没有提供相关接口与命令,另一方面似乎业界目前对于GPU的关注度不足,相关积累与沉淀较少,鉴于此,个人感觉GPU测试这一块也可以作为终端专项后面需要关注及攻克的课题。</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063005370767" rel="nofollow,noindex">解析ViewTreeObserver源码,体会观察者模式、Android消息传递(下)</a></p> <p>继上篇内容,本文介绍 ViewTreeObserver 的使用,以及体会其所涉及的观察者模式,期间会附带回顾一些基础知识。最后,我们简单聊一下 Android 的消息传递,附高清示意图,轻松捋清整个传递过程!在开始下篇之前,有必要回顾一下上篇提及的 ViewTreeObserver 的概念:ViewTreeObserver 是被用来注册监听视图树的观察者,在视图树发生全局改变时将收到通知。这种全局事件包括但不限于:整个视图树的布局发生改变、在视图开始绘制之前、视图触摸模式改变时</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063078625975" rel="nofollow,noindex">Android 7.0 Nougat 多窗口 秘の初体験</a></p> <p>谷歌于8月22日也就是北京时间23日发布了Android 7.0 Nougat牛轧糖的正式版,爱哥也及时将手中的Nexus5X刷到了正式版7.0,把玩了一段时间后爱哥觉得在普通应用的功能上7.0木有太大的改进,当然这是相比5.0而言,5.0爱哥觉得算是Android改动较大的一个版本,刚出来就给人各种惊喜,相对而言7.0则没那么多亮点,一个主要的原因是7.0中不少功能在国内各大各小的UI系统上都早有雏形甚至体验比7.0更好,就拿7.0让人期待的分屏来说,早在某米和某族等国产神机上就有了,某族上的一些应用分屏甚至做得更好</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063163586226" rel="nofollow,noindex">JAVA代码覆盖率工具JaCoCo-实践篇</a></p> <p>Android项目只能使用JaCoCo的离线插桩方式。为什么?主要是因为Android覆盖率的特殊性:一般运行在服务器java程序的插桩可以在加载class文件进行,运用java Agent的机制,可以理解成"实时插桩"。JaCoCo提供了自己的Agent,完成插桩的同时,还提供了丰富的dump输出机制,如File,Tcp Server,Tcp Client。覆盖率信息可以通过文件或是Tcp的形式输出。这样外部程序可很方便随时拿到被测程序的覆盖率。</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063242756161" rel="nofollow,noindex">JAVA代码覆盖率工具JaCoCo-踩坑篇</a></p> <p>JAVA代码覆盖率工具JaCoCo-原理篇和JAVA代码覆盖率工具JaCoCo-实践篇已经给大家介绍过了,本篇为踩坑篇,这里的话题不是说明JaCoCo有什么问题,而是把过程中遇到的几个棘手问题的解决方法分享给大家,只要细心,放下焦虑的心态,问题都可以解决的。在项目中使用JaCoCo覆盖率的时候,也遇到过各种奇葩的问题,在这里列出来分享下,问题和实际的项目关系密切,希望对有遇到过相似问题的童鞋有所启发。</p> </li>    </ol>    <h2><strong>开源库&项目</strong></h2>    <ol>     <li> <p><a href="/misc/goto?guid=4959714063334968103" rel="nofollow,noindex">Amigo</a></p> <p>一个由来自饿了么团队开源的 Android Hotfix 新方案</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063419670374" rel="nofollow,noindex">RecyclerViewSnap</a></p> <p>RecyclerView snapping example with SnapHelper</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063507730207" rel="nofollow,noindex">Particle</a></p> <p>很酷的粒子动画效果</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063593306252" rel="nofollow,noindex">MagicIndicator</a></p> <p>一个强大、可定制、易扩展的 ViewPager 指示器框架</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063669312292" rel="nofollow,noindex">SmartisanPull</a></p> <p>仿锤子阅读下拉刷新效果</p> </li>     <li> <p><a href="/misc/goto?guid=4959677337816210922" rel="nofollow,noindex">StateView</a> ( <strong>By C君</strong> )</p> <p>StateView一个轻量级的控件, 继承自View, 初始状态下是不可见的, 不占布局位置, 占用内存少。 相对于其他具有同样功能的一些控件, StateView更具有优势</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063789968202" rel="nofollow,noindex">GpCollapsingToolbar</a></p> <p>Google Play app behaviour collapsing toolbar</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063863100240" rel="nofollow,noindex">Reduks</a></p> <p>A "batteries included" port of Reduxjs for Kotlin+Android</p> </li>     <li> <p><a href="/misc/goto?guid=4959714063950909969" rel="nofollow,noindex">loaderviewlibrary</a></p> </li>     <li> <p><a href="/misc/goto?guid=4959677437319650575" rel="nofollow,noindex">unipiazza-android-twostepslogin</a> An Android library that helps you to make a cool two steps login in Material Design way. Such as Google web login</p> </li>     <li> <p><a href="/misc/goto?guid=4959714064055005715" rel="nofollow,noindex">TextViewExpandableAnimation</a></p> <p>Expandable TextView With Smooth Transition Animation</p> </li>     <li> <p><a href="/misc/goto?guid=4959714064143223375" rel="nofollow,noindex">UltraIndicator</a></p> <p>A custom indicator for ViewPager</p> </li>     <li> <p><a href="/misc/goto?guid=4959714064237502120" rel="nofollow,noindex">WavyLineView</a></p> <p>A custom wavy line view for android.</p> </li>    </ol>    <h3><strong>工具</strong></h3>    <ol>     <li> <p><a href="/misc/goto?guid=4959714064322746168" rel="nofollow,noindex">Awesome adb</a></p> <p>ADB 用法大全</p> </li>    </ol>    <h3><strong>视频</strong></h3>    <ol>     <li> <p><a href="/misc/goto?guid=4959714064400107083" rel="nofollow,noindex">首次 Sketch 官方授权的线下活动嘉宾分享视频出炉</a></p> </li>     <li> <p><a href="/misc/goto?guid=4959714064480542203" rel="nofollow,noindex">精准测试介绍</a></p> </li>    </ol>    <h3><strong>设计</strong></h3>    <ol>     <li><a href="/misc/goto?guid=4959714064558770818" rel="nofollow,noindex">产品设计的思考方式系列</a></li>    </ol>    <h3><strong>技术之外</strong></h3>    <ol>     <li><a href="/misc/goto?guid=4959714064642944447" rel="nofollow,noindex">一家初创公司的 CTO 应当做什么?</a></li>    </ol>    <h3> </h3>    <p>来自:http://www.androidweekly.cn/android-dev-weekly-issue-96/</p>    <p> </p>