Android 开发周报:Play Store 搜索广告推出、ListView 源码解析

  • 郭亮

2015 年 8 月 4 日

话题:移动Android语言 & 开发架构

新闻

  1. 《正式版 Android M 预计 10 月发布》:Android M 已经连续放出了两个开发者预览版,按照计划还会有第三个,然后才是正式版。这第三个要多等等了,但等待将是值得的。Google 的一名员工 Wojtek Kaliciński 公开发帖称,Android M Developer Preview 3 需要更长时间打磨,因为它们想使之接近最终正式版。
  2. 《谷歌放大招,拯救用户的老旧 Android 机》:其实谷歌的 Android 系统升级并不慢,几乎每年都会有新版本。从 Android 系统诞生以来,就饱受碎片化的困扰,很多机器都不能及时升级。不过好消息来了,为了解决安卓旧手机无法升级,也为了重新夺回对安卓系统的控制权,在下一代的 Android6.0 系统中,核心系统更新和 OEM 厂商更新将会区分开来,核心系统将单独升级。谷歌表示,此举还有利于解决饱受诟病的安卓碎片化问题。
  3. 《坐拥 10 亿 Android 用户,Google 终于开始动 Google Play 这座金矿了》:Google Play 覆盖了 190 多个国家 / 地区的超过 10 亿 Android 设备用户,不管是对 Google 自身来说,还是对在上面分发应用的开发者来说,这都是一个不可小觑的金矿。今年 2 月份开始,Google Play 就开始小范围测试搜索广告服务,如今 Google 终于在 Android Developers 官方博客上宣布,正式推出搜索广告服务。

教程

  1. 《搞个这样的 App 要多久?》:无论你是技术小弟一枚,还是公司的技术总监,总会被别人问到类似于标题这样的问题。如果提问者是同行,我们可以这样回答:大概需要 2 个月,一个后端工程师,Android 和 iOS 工程师各一枚,外加美工...,然后同行点点头,感觉你很务实,也很机智,最后按照你的思路开干。但如果是被外行问到,显然上述回答并不是提问者想要的答案。点击标题,来看看这个“如有雷同,纯属巧合”的故事吧。
  2. 《Android 下的 NFC 是如何开发的?》:随着物联网与 O2O 业务的发展,NFC 在小额支付领域的前景越来越广阔。本文结合多个公开文档,简要介绍了 NFC 的工作场景,同时使用 RxAndroid 实现了对 NFC 字节流的读取与异常捕捉;介绍了卡模拟过程中与 Android 底层的交互原理与简单示例。
  3. 《Android ListView 工作原理完全解析,带你从源码的角度彻底理解》:在 Android 所有常用的原生控件当中,用法最复杂的应该就是 ListView 了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况。ListView 可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了。本文从源码的角度解析了 ListView 的工作原理。
  4. 《使用 O-LLVM 和 NDK 对 Android 应用进行混淆》:Android 开发中经常需要对敏感信息进行加密,避免不了要将密钥存放在终端设备上,那么如何防止密钥被逆向出来呢?相比较密钥从 Java 层下移到 NDK 层是比较安全的,本文就来介绍如何对 NDK 层代码进行混淆,以更好的保护我们的密钥。这里是英文地址
  5. 《Android DataBinding:再见 Presenter,你好 ViewModel!》:最近一段时间 MVP 模式已经成为 Android 应用开发 UI 层架构设计的主流趋势。类似 TED MOSBY,nucleus 和 mortar 之类的框架都引入了 Presenters 来帮助我们搭建简洁的 App 架构。它们也(在不同的程度上)帮助我们处理 Android 平台上臭名昭著的设备旋转和状态持久化等问题。MVP 模式也有助于隔离样板代码,虽然这并不是 MVP 模式的设计初衷。本文详细分析了这种架构。
  6. 《为什么刷机后系统第一次启动会很慢?》:在做 Android 内核开发的过程中,我们会发现,每次编译完系统源码,烧录到设备或手机中后,第一次启动都会很慢很慢,要好几分钟甚至十几分钟,为什么会出现这样的现象呢?系统刷机后第一次启动与后面再次启动有什么不同呢?阅读文章,了解真相。
  7. 《使用 Android lint 发现并解决高版本 API 问题》:在编写代码时,为了实现一些功能,我们需要使用高版本的 API,比如 SharedPreference 的 Editor 中的 apply 方法为 API 9 开始引入,在 API 9 以上的机器使用没有问题,但是在 API 8 上,如果运行时执行了这段代码,就会崩溃,问题相当严重。尤其是该问题出现在正式版中,后果不堪设想。本文介绍了如何使用 lint 发现并解决这些问题。
  8. 《 TabLayout:另一种 Tab 的实现方式》:在 5.0 以前我们想要实现像网易新闻客户端那样的的 Tab 可以有很多种选择:比如古老的 TabHost,3.0 后 ActionBar 所提供的 Tab,以及各种成熟的 Tab 开源控件都可以直接或间接地实现 Tab 的效果。谷歌在 5.0 后放出的 design 包中推出了官方的 TabLayout 控件,TabLayout 可以 方便地实现类似效果,并且符合谷歌自家的 MD 设计理念,本文介绍了 TabLayout 的使用方法。

开源项目

  1. Carpaccio:Carpaccio 是一个第三方的 Android DataBinding 库,它可以使 View 变得非常“聪明“,使用 Carpaccio 后,如果要让一个 ImageView 从网络加载图片,我们不再需要写相关的网络请求代码,在 layout 中添加一个标签就可以完成所有操作。Carpaccio 是非常实用的一个类库。
  2. TagCloudView:TagCloudView 是一个支持 SingleLine 模式的标签云开源项目,使用 TagCloudView 可以轻松实现知乎问题话题列表标签云效果,TagCloudView 还提供了丰富的自定义样式选择。
  3. CustomActivityOnCrash:每个 App 都会有奔溃的可能性,无论我们开发的时候多认真,测试过多少种机器,总会有一定的错误率。当 App 异常时,系统会弹出一个错误对话框。使用该项目,我们可以在 App 异常时显示一个自定义的错误页面,从而提升产品的用户体验。

工具

  1. 上传 apk 到 fir 的 gradle 插件:App 内测需要把安装把安装包放在一个地方进行托管,方便内测人员下载。国内有蒲公英,fir 等这些网站可以用。该工具是非官方的一个 gradle 上传工具。
  2. JSONExport:JSONExport 是一款 Swift 编写 Mac OS X 桌面应用,支持将 JSON 输出为 Objective-C/Swift/Java 语言类模型。

感谢徐川对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

移动Android语言 & 开发架构