使用来自Facebook的调试神器Stetho对Android应用程序进行调试

UI、网络交互以及本地数据存储在当前的手机应用程序开发中已经是不可缺少的三个元素了,然而如何在开发过程中快速调试这三个元素则成为提高开发效率的必然途径。 在不是用任何辅助工具的情况下,我们罗列一下这三个元素的的普通调试方式:
UI:若是静态的UI我们只需在在AS中实时预览即可,而如果是动态UI,比如代码生成或者根据用户操作实时生成这些情况,我们则不能比较直观的查看到UI的层次结构。
网络交互:若是简单的监听返回数据,我们或许可以通过Log打印出来,简单的GET请求也可以在浏览器上输入URL进行测试,但是遇见参数复杂或者数量庞大的网络请求的情况下,上述两种方式都不能优雅的解决我们的问题。
本地数据:Android的本地数据包括数据库和SharedPreference(SP),查看数据库数据无非两种方式,一种是使用Android平台的查看工具进行查看,第二种这是把sql文件拷贝到电脑上使用工具进行查看,而数据库数据变更后我们则需要再次拷贝一份。而SP的数据除了查看对应的xml文件,则只能通过写一份工具代码来遍历查看了。

如果你的开发效率卡在上面这些瓶颈上,那么Stetho则是解决这个问题的“银弹”。

使用Chocolatey包管理器一键搭建windows开发环境

最近腾讯开放内测的微信小程序火了,而官方支持IDE只有windows版和Mac版的,稍微研究了一下这个IDE发现是node-webkit开发的,理论上应该是跨平台的,但不知为何这个IDE并没有支持Linux环境。喜欢折腾的我当然是要尝试一下的,奈何是使用Ubuntu作为主力开发环境,所以只能重做一个windows系统了。
话说回来,重装系统之后最大的问题就是开发环境需要配置,比如JDK、各种IDE、python、nodejs、tomcat、mysql、以及各种小工具等等,而把一个新系统配置到能正常进行开发工作基本上要耗费半天时间,时间就是生命,怎能这样无情的浪费。
Chocolatey是一个类似于linux中apt-get和yum这样的工具,通过他可以自动获取到需要软件的下载地址以及安装脚本已完成自动安装,而本篇则记录如何使用Chocolatey来通过脚本文件实现一键搭建开发环境,就像这样:

initWineEnv.bat

Linux开发环境中使用shell/python脚本快速自动打包并查看apk文件

最近工作中突然遇到一个很烦人的问题, 事情的起因是这样的. 我参与开发/维护着大概5个项目, 负责服务端后台的同事经常在自己的本地电脑启着本地服务测试一些东西, 而他们的本地局域网IP是经常变动的, 那么问题来了, 只要他们的IP地址变动了就会过来找我针对某个局域网IP地址为某个项目打个包, 烦不胜烦. 甚至有些情况下需要两项目同时开发, AndroidStudio需要连着开好几个, 但是电脑受不了啊, 而且AndroidStudio有一个非常不友好的地方: 如果开启多个AndroidStudio工程, 只要某一个窗口卡了, 那么其余的工程界面也全都是无响应状态的. 当这两个问题重叠到一起的时候, 好了, 可用把鼠标和键盘放一边慢慢等着打包吧, 完了才能继续快乐的编程. 这简直不能忍.
今天针对这个问题, 记录一种解决方法, 实现在不打开AndroidStudio的情况下自动打包, 指定version/ip地址等, 并在打包完成后显示签名信息以及apk详细信息且打开apk所在文件夹.

python buildapk.py -i 192.168.x.x -v 1.2.3

自定义view展示官方Interpolator并扩展自定义Interpolator

现在动画在Android开发中使用得越来越频繁, 一个新发布的app如果没有一点酷炫的效果还真拿不出手, 然而说到动画必然会联系到动画差值器Interpolator, 这是一个让动画执行起来不会闲的突兀或者平淡乏味的东西, 有了它我们的动画会显得更加生动和具有物理特性.
而实际开发过程中如果需要某个差值器的情况下, 一般是找一些曲线图片然后依靠想象挑选或者直接挨个尝试来得到最合适的, 这些做法虽然可行但终究还是比较麻烦, 说直白点就是比较low, 而且在官方提供的差值器不满足我们的需求的时候, 我们需要开发自己的差值器, 在这种情况下就更需要一种非常直接的方法来展示差值器的效果了.
本篇则基于这样的需求驱动, 自定义了View来展示曲线以及差值器的执行效果, 把官方所有的差值器都放进去跑起来, 当需要的时候直接挑选即可. 而自定义的Interpolator也可用来测试以及查看差值曲线.
图:

Interpolator示例1 Interpolator示例1 Interpolator示例1

使用v8兼容包对图片进行高斯模糊处理/毛玻璃效果

android中实现毛玻璃效果的方法比较多, 有用java实现图片处理算法的, 也有把算法用c/c++实现并用jni调用的, 而实现毛玻璃的开源库在github上也有不少.
其实google的官方sdk中也为我们提供了这样的工具, 本着能用官方尽量不自己实现,能自己实现尽量不用第三方的原则, 官方的实现方式当然是要尝试一下的.
同时, 本例中的拖拽进度和图片的处理以及回显是通过RxJava放在不同的进程中处理的, 如果不熟悉Rx框架可以补一下, RxJava用于异步操作以及事件流的处理非常好用.
上图:

高斯模糊示例

给应用增加动态切换主题配色的功能

最近发现BiliBili客户端有个非常个性的功能, 提供了夜间模式/少女粉/姨妈红/胖次蓝/基佬紫等主题配色供用户切换选择, 不但丰富了用户了的视觉体验, 而且一定程度的增加了产品的收入, 是的你没看错,BiliBili客户端的很多配色主题都是要花费硬币的. 这么酷炫又实用的功能当然不能错过了!
上图:

颜色主题效果

RxJava常用操作符分类总汇

上文提到ReactiveX在多种语言和平台上都存在着自己的实现,同时也都实现了一套操作符,在这些语言平台中有一些操作符的实现是重叠的,也有一些只存在于特定的平台实现中。每种实现都会根据当前平台的命名规范给这些操作符定义相似的命名。
本文收集了Java平台Rx的一些常用操作符,并对这些操作符进行分类并简单注释这些操作符的含义和用法。

使用RxJava实现多次连续点击的事件监听

说起响应试编程,要提到的当然是Rx系列的库了,Rx系列的库对于很多语言和平台的运用是非常广泛的,例如(.NET,Java, Scala, Clojure, JavaScript, Ruby, Python, C++, Objective-C/Cocoa, Groovy等等。而本篇将会记录如何使用RxJava对Android点击事件的监听以异步数据流的方式来进行处理,从而实现对多次点击事件的监听。
多次点击事件的监听在Android中应用还是比较广泛的,比如“再次点击关闭应用程序”,又比如7次连续点击开启开发者模式等等。常规的设计无非是定义一个变量来记录点击的时间差或者定义一个线程来重置连击标识,然而这样的设计写出来的代码并不好看,而且可读性不高不易扩展。但是使用RxJava来实现就不会有上述这些问题了,而代码非常简洁。
上示例图:

多次点击示例

浅析Google官方AndroidMVP架构示例

传统的MVC架构是个非常经典的设计,它将系统的任务进行分层,将代码分割到模型(model)-视图(view)-控制器(controller)三个层面来实现解耦,从而简化开发流程,实现开发任务的分离。
而在android平台中,xml布局文件作为视图的承载能力并不强,通常会将一部分的view操作放在Activity/Fragment中来处理,而Activity/Fragment通常又担任了controller的角色,这就造成了V和C在Android中通常融合在一起,以至MVC的设计架构在Android中并不能进行很好的分层,形成了一种貌合神离的现象。
在这样的背景下,MVP设计架构应运而生。在MVP中单独抽离了一个P(Presenter)层来负责数据流向控制的角色,而xml布局文件和Activity则统一作为V(View)来单一的负责视图的生成和变更。
对于Android中MVP设计架构Google也提供了一些sample,本篇摘取一个待办事项的示例来初步解析Google官方对MVP的实现方式。

做一个二阶Bezier曲线的绘图工具

在开发一些特效或者控件的时候常常会用到一些数学函数,除了三角数学函数外,使用最多的就是Bezier了,也就是我们常说的贝塞尔曲线。
Android开发中常常会使用Bezier曲线绘制一些图形,或者使用Bezier曲线生成一些动画的运动轨迹,亦或者使用贝塞尔曲线制作动画的差值器。
总之,这是一个作用非常大的东西,它不像三角数学函数那样有固定的曲线特性,而是根据参数的变更而呈现出不同的曲线,可以这样说,Bezier曲线可以根据用户的需求调整自身的曲线形式,可以满足绝大部分用户对曲线的需求,如果不能,那就再加一阶。
本篇的初衷是因为贝塞尔函数看起来是非常抽象的,使用时则需要不断调整参数来尝试出合适的结果,而本工具则是根据调整出的曲线逆向显示出函数的参数,废话不多说,上图:

Bezier曲线绘制效果

,