自动检测性能问题 - BlockCanary 原理解析

大家应该对 LeakCanary 比较熟悉,这个 Square 公司推出的自动检测内存泄露的工具,给开发人员带来了极大的便利。而国人也开发出一个用于自动检测性能卡顿的工具,BlockCanary, 今天将从原理上分析 BlockCanary 是如何实现的。

Kindle Unlimited 包月读书计划

Kindle 在出世很久后,受到了广泛的好评,水墨屏的设计极大程度上贴近了纸质书的阅读体验,后期推出的 Paper White,通过背光灯的技术,实现了宣传中的在夜色的树下读书的场景。

Kindle Logo

大话插件 - 动态加载插件 Activity

有时候稍不注意, 忘记在 Manifest 文件中注册 Activity,在运行的时候启动 Activity 时就会触发 ActivityNotFoundException 的异常。对于每一个运行的 Activity 都需要进行注册,这个常识我们都很清楚,但是在插件中这样的要求就有些难以实现,由于宿主程序在设计的时候,不知道插件的细节,更不用说在宿主程序的 Manifest 里面提前注册插件 Activity。

在这篇文章中,介绍了几种可以绕过 Android 对 Activity 需要注册的限制的实现方式。对这些实现方式的了解,有助于理解 Activity 背后的原理,加深对 ActivityManagerService 等等重要系统服务的认知,是不错的进阶知识。

在正式开始写之前,我还是想额外地扯扯淡。就我自身看来,插件化技术本身的未来是不明朗的,在后续日趋稳定的类 Reactive Native 技术稳定(国内有 Weex)后,可以帮助我们屏蔽不同版本的兼容性问题,实现动态功能的成本也更低,可能更适合于长远方向。但我依旧还在学习插件化技术,是在于插件化技术的深入理解需要依托于对 Android Framework 层的透彻了解上,通过对此的学习,对自身内功的修炼很有裨益。Android 技术也日新月异的发展,而背后的 Framework 层则相对稳定,设计理念也是大体相同,对于 Framework 层的理解能帮我们构建出更好的程序。这就是你所不能被其他人替代的地方,因为你的不可替代性,也能赢得更好的机会。

大话插件 - 解析 APK 信息

在上一篇文章 Android ClassLoader 加载机制 简单介绍了 Android 的类加载机制,以及我们如何通过这个机制,加载位于 SD 中的APK,并通过同一接口的方式,来实现宿主程序和插件程序之间的解耦。接下来在这篇文章中,将说明如何获取插件 APK 的 Activity, Service 等组件信息,如何将这些内容据为己用。

在具体讲解前,最好先阅读下 Android 应用安装过程源码解析, 这里详细说明了 Android 是如何安装一个应用,对这一过程的了解,有助于我们在此基础上,通过反射、代理等方式,绕过系统限制,达成我们不通过系统安装过程的情况下,加载对应的 APK 文件。

Android 应用安装过程源码解析

摘要 本文是 Android 系统学习系列文章中的第一章节的内容,介绍了 PackageManagerService 在启动时如何去加载已安装的应用,通过一个新的应用是如何在 PackageManagerService 的帮助下完成安装过程的。对此系列感兴趣的同学,可以收藏这个链接 Android 系统学习,也可以点击 RSS订阅 进行订阅。

接下来的分析,如果没有特别提及,是基于 SDK-23 版本进行的。