Android 开发周报:反编译对抗研究、动手制作智能镜子

  • 郭亮

2015 年 9 月 17 日

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

新闻

  1. 《Android Wear 落地中国 谷歌增强安卓生态控制力》:9 月 8 日,由摩托罗拉推出的智能手表 Moto 360 二代作为国内发售的第一款搭载官方 Android Wear 的设备,正式在上海发布。值得注意的是,摩托罗拉这款智能手表搭载的不是 Google Play 和谷歌地图,而是联想应用商店和搜狗地图。这意味着,谷歌开始接受其安卓生态系统和原生服务分离的方式进入国内市场。这种现象在以前是无法想象的。
  2. 《安卓 6.0 正式版将不带夜间模式》:在谷歌的第一个 Android M 开发者预览版中,新增了一个夜间模式主题,受到了很多人的欢迎,然而不知为什么,在之后的 Beta2 和 Beta3 中,这一功能不见了踪影。夜间模式对于用户在夜间的阅读体验也确实有很大提升,不知为何谷歌要做出取消该功能的决定,现在用户只能寄希望于第三方主题。
  3. 《安卓 5.0/5.1 份额突破 20%,依然落后安卓 4.4》:近日谷歌公布了 9 月第一周的安卓系统版本数据,数据显示,Android Lollipop(5.0 和 5.1)的占有率首次突破 20%,达到 21%。但相比 Android 4.4 KitKat 39.2% 的占有率以及 Android 4.1/4.2/4.3 Jelly Bean 31.8% 的占有率仍存在很大差距。与此同时,整体来说安卓系统的碎片化问题依然非常严重。

教程

  1. 《Android 分包 MultiDex 原理详解》:当 Android 系统安装一个应用的时候,有一步是对 Dex 进行优化,这个过程有一个专门的工具来处理,叫 DexOpt。DexOpt 的执行过程是在第一次加载 Dex 文件的时候执行的。但旧版本的 DexOpt 有一个问题,它会把每一个类的方法 id 检索起来,存在一个链表结构里面,而链表的长度是用一个 short 类型来保存的,导致了方法 id 的数目不能够超过 65536 个。当一个项目足够大的时候,就会报方法数超限有错误信息。为了解决方法数超限的问题,需要将该 dex 文件拆成两个或多个,本文给大家详细介绍了拆包的原理。
  2. 《Android Log 工具类》:Log 是调试程序必不可少的工具,当然在 Android 开发过程中也会面临许多关于 Log 的问题,比如不容易找到自己设置打印的内容,找到 Log 但是定位到 Java 源码有不是很方便,对 Log 打印需要设置 Tag,发布正式版本需要注释或者关掉很多 Log 开关等。一个优秀的 Log 工具可以帮助我们节约大量的调试时间,本文详细介绍了 Log 的优化策略,并给出了封装好的 Log Utils。
  3. 《Android 的消息机制之 ThreadLocal 的工作原理》: Android 的消息机制主要是指 Handler 的运行机制,Handler 的运行需要底层的 MessageQueue 和 Looper 的支撑。Handler 创建的时候会采用当前线程的 Looper 来构造消息循环系统,那么 Handler 内部如何获取到当前线程的 Looper 呢?这就要使用 ThreadLocal 了,ThreadLocal 可以在不同的线程之中互不干扰地存储并提供数据,通过 ThreadLocal 可以轻松获取每个线程的 Looper。ThreadLocal 是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据。本文结合实例,分析了 ThreadLocal 的工作原理。
  4. 《Android 内存泄露案例分析》:一款优秀的 Android 应用,不仅要有完善的功能,也要有良好的体验,而性能是影响体验的重要因素之一。内存泄露是 Android 开发中常见的性能问题。本文作者以真实案例演示内存泄露从发现、分析定位到最终解决的全过程。
  5. 《Android 程序的反编译对抗研究》:对抗反编译是指让 Apk 文件或者 dex 文件无法正常通过反编译工具,而且有可能导致工具异常或者崩溃。目前大多数 Android 软件的反编译工具都是开源的,比如 apktool、Dex2jar、baksamli,大家可以非常方便的从 github 下载并源阅读代码,然后找到可以利用的点,再在自己的软件中加入干扰代码,让反编译工具出现异常或者无法正常阅读代码。本文作者实践了对抗的详细过程。

开源项目

  1. HomeMirror:近年来智能化这个概念炒的很是火热,很多家电都已经实现了智能化,比如智能灯泡、电视等。或许你也在视频里看到过智能镜子,但应该从来没想到自己也能制作一块这样的镜子。HomeMirror 提交不到一个月,获得了 4000+ 的 star,可想项目多么受欢迎。该项目实现了一块比较智能的镜子,镜子能显示日期、天气、股票以及一些娱乐信息等。项目中给出了包括软件、硬件的完整实现过程。当然,更强大的功能还需要你去发挥想像。如果英文不太好,也可以看这里的中文翻译。
  2. Colorful:这是一个基于 Theme 的 Android 动态换肤开源库。Colorful 在实现换肤的过程中,无需重启 Activity、无需自定义 View。我们可以利用该项目方便的实现夜间模式功能。
  3. ExpandableLayout:由于移动设置屏幕比较小,有时候我们仅需要直接显示简介,当用户进行点击操作的时候才会展示所有内容。ExpandableLayout 是一个可伸缩的自定义 view,并且伸缩过程中伴随着体验非常好的动画效果。ExpandableLayout 可以使用到列表展示、隐藏菜单,甚至也可以用于搜索提示。

工具

  1. Android 平台主流应用程序模板:虽然移动互联网在近年来势头很猛,但如今无论是 Android 还是 iOS,大部分应用几乎没有下载量。有大量开发商其实并没有必要从头到尾去独立开发一款 App,可以从网络上下载或购买各类应用模板,并利用它们构建自己的移动应用项目。这样不仅能够在为初创公司时省 Money,还能够节省下大量时间。本文收集了市场上十套最具实用性的 Android 应用模板(收费),希望能够帮助大家轻松打造出属于自己的应用成果。这里是英文原文,内附模板下载地址。
  2. Android 逆向工程工具集:这是一个 Android 反编译工具的合集,收集了目前比较流行的反编译软件,项目持续更新中,你如果有更好的反编译工具,欢迎参与到项目中来。

感谢徐川对本文的审校。

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

移动Android语言 & 开发架构