Race604

Android

Android 的蓝牙简介

本文主要是翻译了 Google 的官方文档。 简介 Android 提供默认的蓝牙协议栈是 BlueDroid,分为两层:蓝牙嵌入式系统(BTE)和蓝牙应用层(BTA),BTE 层主要实现蓝牙的核心功能,BTA 层则主要负责和 Anroid 框架通信。 Android 4.2 之前,Google 一直应用的是 Linux 官方蓝牙协议栈,即知名老牌开源 项目 BlueZ。BlueZ 实际上是由高通公司在 2001 年 5 月基于 GPL 协议 release 的一个开源项目,该项目仅 release 一个月后就被 Linux 之父 Linux Torvalds 纳入了 Linux 内核,并做为

By Race604

Android

[第20期]Android周报

文章/教程 1. 美团 Android DEX 自动拆包及动态加载简介 一个多 DEX 打包实践。对于大型的 Android 项目是非常有必要的,可以参考一下这里的实现和可能遇到坑。 2. Android Studio 分模块自动化构建实战 使用 Gradle 自动化构建模块的一个实例。Gradle 构建非常灵活,配合一些自定义脚本,能够自动化干很多事情。 3. 一步一步教你实现 Periscope 点赞效果 有些动画看起来非常炫酷,但是具体实现起来,就会发现其实很简单,本本使用简单的接口来一步一步实现模拟 Periscope 的点赞效果。 4. Android 项目利用 Android Studio 和 Gradle 打包多版本 APK 再推荐一个使用 Gradle 脚本配置多版本的打包。正是因为用了 Gradle,让

By Race604

Android

[第19期]Android周报

文章/教程 1. Android 应用层 View 绘制流程与源码分析 通过分析源码详解了 View 的 measure, layout, draw 流程,对理解 Android 中最核心的 View 类有非常大的帮助。(@工匠若水) 2. Android Design Support Library 使用详解 Android 社区发生的大事就是最近开了 Google I/O 大会。大会给开发者的大礼就是发布了这个库, Material Design 很多特性都官方支持了,这篇文章就带你快速用上这些神器。 3. ViewStub、include、merge使用与源码分析 从源码角度分析布局中使用 include, ViewStub 和 merge 的方法,以及各自的原理和特点。文章比较浅显易懂。 4.

By Race604

Android

FlyRefresh——让人眼前一亮的下拉刷新

几天前在网上看到 @Zee Young 的一个下拉刷新的设计 Replace。如下图: 第一眼看到这个设计就觉得眼前一亮,在Dribble上获得了 1.7k 多的 like,微博上也有大量转发。可见确实一个很成功的设计。我准备在 Android 上来实现它。 经过几天的折腾,最终实现并开源在 Github 上,项目地址: FlyRefresh,实际效果如下图: 总体上还原了设计的70%~80%,还有一些细节需要改进。因为没有拿到设计师的设计源文件,动画和颜色的细节并没有能够做的完全一致。下面分享一下实现的过程。 1 分析设计效果图 要实现这个设计,就要非常仔细的分析这个动画的每个细节。由于没有设计源文件,我最开始就一直盯着这个 GIF 图看,然后构思一下大致的实现流程。在写代码的过程中,甚至把 GIF 图分解成一帧一帧的图片来分析,把 GIF 图分解的方法如下: convert -coalesce animation.gif

By Race604

Android

[第18期]Android周报

文章/教程 1. LeakCanary 中文使用说明 良心企业 Square 又出大招,自动检测内存泄露的开源库,内存泄露检测变得非常容易了。 2. Material 适配2 - 高级篇 这篇文章详细讲解了怎么使用 Toolbar 来替换以前的 ActionBar,还有怎么避免踩一些坑。还有这个系列的入门篇。 3. 详解 Dagger 2 Dagger 2 是一个依赖注入框架,已经被 Google 官方接管,其威力可想而知。本文从原理和实践上讲述了 Dagger 2 的使用。 4. Android 如何直播 RTMP 流 Android 上视频流直播解决方案。 5. 聊聊移动端跨平台开发的各种技术 移动开发的各种跨平台技术的综述,跨平台技术可能是未来的趋势,但是谁是最终的胜者却还是未知数。 源代码/库

By Race604

Android

[第17期]Android周报

因为最近太(tōu)忙(lǎn),间断了两期周报,我错过了很多,后面会继续保持更新。 文章/教程 1. 自定义 Drawable -- 实现过渡效果 可以通过自定义的 Drawable 轻松实现绚酷图标的过渡效果,实现思路很巧妙。 2. NotRxJava 懒人专用指南 本文作为 RxJava 的入门前传,通过实例一步一步讲解了 RxJava 的诞生原因及其解决的问题,对理解和使用 RxJava 非常有帮助。 3. 安卓 APP 动态调试技术 再没有源代码的情况下调试 Android 应用,也许那天就要用到了呢。 4. Android 性能优化典范 - 第 2 季 @胡凯me 大神又一贡献,总结了 Google 官方的

By Race604

Android

[第16期]Android周报

文章/教程 1. Android 性能优化系列 上期周报推荐了 Google 联合 Udacity 推出免费的 Android 性能优化进阶课程。这里胡凯总结了课程的内容,分为四篇:渲染篇、运算篇、内存篇和电量篇。(@胡凯me) 2. 那些年我们错过的响应式编程 一篇讲解响应式编程思想的文章,并且有一个生动的例子。看起来和 Android 没有什么关系。如果你想在实践 Android 响应式编程(使用RxAndroid),这是一篇非常好的入门文章。 3. 深入浅出 RxJava 四 -- 在 Android 中使用响应式编程 看了上一篇文章,这篇文章就教你怎么在 Android 中使用响应式编程了。这是一个系列文章,主要讲解 RxJava,正好 RxJava 也可以用在 Android 上,

By Race604

Android

[第15期]Android周报

文章/教程 1. Android 性能优化后续 Romain Guy 大神的文章,又一次在没有任何源代码的情况下,利用工具找出 App 的性能问题。好吧,同时随便推荐我的半分钟读完的笔记。 2. Gradle 插件用户指南(译) Android Studio 使用 Gradle 来构建项目。本文是 Gradle 插件详细指南,留作备用。 3. Android 内存优化-使用 MAT 这是系列文章,包括一、二、三,介绍了使用 MAT 工具,进行分析和调试 Android 应用的内存使用方法,图文讲解的非常清晰。 4. 使用 AIDL 实现进程间的通信之复杂类型传递 文章浅显易懂,讲述了一个怎样通过 AIDL

By Race604

Android

[半分钟读完]Android性能实例研究续

这是《几分钟读完》的第二篇,本文是 Android 大神 Romian Guy 的文章 Android Performance Case Study Follow-up。看完这篇,强烈推荐去看大神的原文,引用大神的一句话: Don’t make assumptions, measure! 别瞎蒙,要检测! 大神在没有任何源代码情况下,来分析 Falcon Pro 性能问题。文中 Romain 使用 Android 开发工具 Tracer for OpenGL(这里有这个工具的详细使用方法)。这个工具用来收集所有的 UI 控件发送给 GPU 的绘图命令,所以用它可以清楚的看出 GPU 是怎样逐步绘制你的 View 的。 因为他是大神,从

By Race604

Android

[第14期]Android周报

文章/教程 1. FaceBook 推出的 Android 图片加载库 - Fresco Fresco 的官方介绍,说明了 Fresco 要尝试解决的问题,以及解决思路。 2. Fresco 中文文档 Fresco火的一塌糊涂,官方文档的中文翻译也很快诞生,翻译的还是很精准的。 3. Android 使用 SVG 矢量图打造酷炫动效 这是上期周报推荐的 Android 动效的系列文章之一,动画效果真的是让我不由虎躯一震,看看作者是怎么一步一步实现的。 4. 使用 RxJava.Observable 取代 AsyncTask 和 AsyncTaskLoader 又一个实用 RxJava 大发神威的案例。RxJava 给我们的开发带来很多好处,让你的代码简洁、清晰、健壮,便于维护。总之,RxJava,

By Race604

Android

[第13期]Android周报

文章/教程 1. AndroidEventBus(事件总线)的设计与实现 AndroidEventBus 是一个 Android 平台的事件总线库,它吸收了 Greenrobot 的 EventBus 以及 Square 的 otto 的优点,本文分析了其实现原理。 2. Android 开发最佳实践 android-best-practices 项目的中文翻译,内容涉及 Android 开发的方方面面的小技巧。(PS:中文翻译不是很通顺,可以看看英文原文)。 3. 关于某知名浏览器和聊天工具悬浮窗原理的简单分析 来了解一下 Android 中的黑科技,不为了效仿,而是为了学习原理。 4. Google+ 团队的 Android UI 测试 UI 测试是 Android 的一个难点,来看看 Google

By Race604

Android

[半分钟读完]Android中保存和恢复Fragment状态的最好方法

引言:受谷阿莫的《几分钟看完》系列视频的启发。我也准备写一些几分钟看完的文章,摘录博客的要点,也可以节省查阅的时间。 这是《几分钟读完》的第一篇,文章的原文是:Probably be the best way (?) to save/restore Android Fragment’s state so far。如标题,本文就讲了一个保存 Android 的 Fragment 的状态的方法。 我们都知道,类似 Activity,Fragment 有 onSaveInstanceState() 回调用来保存状态。但是,根据作者的经验,这个方法调用非常的不靠普。Fragment 在屏幕旋转和返回堆栈(Backstack)中的时候,都会创建一个全新的 View,这个 onSaveInstanceState() 方法经常会出现不会被调用的情况,

By Race604

Android

[第12期]Android周报

文章/教程 1. 加速Android Studio/Gradle构建 随着项目的增大,依赖库的增多,构建速度越来越慢,本文介绍的方法,帮你大幅度提高你的Gradle项目编译速度。 2. Github上有哪些适合新人围观的Android项目 @Trinea 在知乎回答的问题,让大牛引导你进门,然后也变为大牛。 3. Android 属性 allowBackup 安全风险浅析 结合实例详解了Android 的 allowBackup 属性的作用,以及可能存在的风险。 4. 每个Android开发者必须知道的内存管理知识 OOM 是 Android 开发着最遇到的问题之一,也是比较难解决的问题。本文介绍了一些开发技巧,能够让你最大限度的远离内存溢出问题。 5. 通过 JNI 调用 OpenSSL 实现加密解密 这是比较高级的应用,这篇文章介绍了编译C/C++库,并集成到Android项目中。 6. Facebook 新闻页

By Race604

Web

给博客添加邮件订阅功能

Android周报发布了十几期了,有不少朋友问是否支持邮件订阅周报。今天才认真考虑怎样来支持这个功能。 经过搜索,很快发现了一个专门提供这类服务的网站——MailChimp。据说这个网站发展了十多年了,也非常有名,我今天才使用,其功能强大和专业,让我很激动。关于邮件订阅的功能,甚至每个细节都做的非常完美。下面我大概纪录一下怎么使用 MailChimp 来实现Android周报的邮件订阅功能。 1. 首先到这里免费注册账号,点击这里注册。每个月2000个订阅者以下是免费的。 2. 创建一个订阅邮件列表,也就是你的订阅者集合。例如我这里创建一个Android周报的订阅者列表。点击这里新建列表 在这个邮件列表中你可以手动添加一些邮件地址。系统也给你自动生成了一个链接,打开这个链接,就能让其他用户自己添加邮件订阅,而且这个页面的样子可以完全自己定义,例如Android周报的邮件订阅地址是:http://eepurl.com/bgYx0j,欢迎点击订阅。还可以生成嵌入网页的订阅框等等。 3. 创建一个 Campaign,也就是一个邮件订阅活动,点击这里创建。这里你可以设置你的邮件内容来

By Race604

Android

[第11期]Android周报

文章/教程 1. 关于谷歌 Material Design:你需要知道的一切(翻译) 本文简要总结了Material Design设计原则和规范。特别是后面有相关的设计资源下载总结,值得收藏。 2. Android Proguard 详解 本文解释了Proguard的基本概念,特别是Proguard出错的一些问题的解决方法。 3. 使用 Chrome 来调试你的 Android App 本文介绍了使用 Facebook 的开源 Stetho 工具的帮助,能够使用 Chrome 来调试 App。主要用来调试网络请求、查看 SqLite 数据库和 SharePreference 等。 4. Volley 源码解析 之前的推荐过 Android 开源项目源码解析 系列。这里系列的一篇文章,详细分析了 Google 的开源网络库

By Race604

Android

BLE开发的各种坑

这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈)。总体感觉 Android BLE 还是不太稳定,开发起来也是各种痛苦。这里记录一些杂项和开发中遇到的问题及其解决方法,避免大家踩坑。本文说的问题有些没有得到官方文档的验证,不过也有一些论坛帖子的支持,也可以算是有一定根据。 1. Android 从 4.3(API Level 18) 开始支持低功耗蓝牙,但是只支持作为中心设备(Central)模式,这就意味着 Android 设备只能主动扫描和链接其他外围设备(Peripheral)。从 Android 5.0(API Level 21) 开始两种模式都支持。BLE 官方文档在 这里。 在 BluetoothAdapter.startLeScan() 的时候,在 BluetoothAdapter.LeScanCallback.onLeScan() 中不能做太多事情,

By Race604