作者:Oz
版权声明:本文图文为博主原创,转载请注明出处。
概述
对于插件化框架 Hook 机制是一个核心,那到底 Hook 是什么呢?怎么去理解插件化中的 Hook 呢?在我看来插件化中的 Hook 机制就是通过反射注入和动态代理来实现的。
先来说说何为反射注入,大家都知道依赖注入,其实反射注入算是依赖注入的一种,顾名思义,通过反射的方式将依赖对象注入目标对象。举个例子,想要替换掉 ActivityThread 中的 mInstrumentation:
作者:Oz
版权声明:本文图文为博主原创,转载请注明出处。
对于插件化框架 Hook 机制是一个核心,那到底 Hook 是什么呢?怎么去理解插件化中的 Hook 呢?在我看来插件化中的 Hook 机制就是通过反射注入和动态代理来实现的。
先来说说何为反射注入,大家都知道依赖注入,其实反射注入算是依赖注入的一种,顾名思义,通过反射的方式将依赖对象注入目标对象。举个例子,想要替换掉 ActivityThread 中的 mInstrumentation:
作者:Oz
版权声明:本文图文为博主原创,转载请注明出处。
提到 Android 插件化,一个基础的知识点就是 Java 的类加载机制。这部分知识请参考深入探讨 Java 类加载器,以下摘录部分内容。
Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。
作者:Oz
版权声明:本文图文为博主原创,转载请注明出处。
这段时间在研究插件化相关的技术,追根溯源,所以干脆把Apk的安装流程梳理了一遍,与大家共享,望指正!
本文基于Android 5.1的源码,分析Apk安装流程。
Apk是Android Pakage的缩写,即Android安装包,Apk文件其实是zip格式,一般包含一个或多个dex文件、resources.arsc、AndroidManifest.xml、res目录、META-INF目录及包含so库的lib目录,这里就不在啰嗦。
作者:Oz
版权声明:本文图文为博主原创,转载请注明出处。
大家有没有好奇过点击Launcher图标时,到唤起一个应用页面,这个流程会是怎么样的?本文的目的就是尽可能梳理清楚流程,能够让大家对整个流程有一个相对清晰的认知。
在我们开始之前,希望您能最好已经满足以下条件:
有一份编译后的Android源码(亲自动手实践才会有更深入的理解)
对Binder机制有一定的了解
本文启动流程分析基于Android 5.1的源码。为什么是5.1的源码呢?因为手边编译完的代码只有这个版本…另外,用什么版本的源码并不重要,大体的流程并无本质上的区别,仅仅是实现细节的调整,找一个你熟悉的版本就好。
作者:Oz
插件化技术(也叫动态加载技术)在技术驱动型的公司中扮演着相当重要的角色,当项目越来越庞大的时候,需要通过插件化来给应用瘦身,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。对于业务迭代较快的公司,可以减少发包次数而且有很好的覆盖度。
以下为这段时间学习插件化的一些笔记或摘要及自己的一些理解。
上次讲到实现RecyclerView的功能扩展,本次就接着介绍针对RecyclerView.Adapter的封装的一些想法。
随着移动端的蓬勃发展,复杂的产品布局也变成了家常便饭,复杂的布局排列组合也成了常态。
自从使用了RecyclerView再也回不去了,什么ListView、GridView统统让他们退休了。必须安利起来,用了才能体会它的神奇!
根据使用RecyclerView以来,拓展的一些功能及对RecyclerView.Adapter的封装,想在这里跟大家分享一些经验,还望指正。
基于对RecyclerView在使用过程中的一些痛点写了这个开源项目 TurboRecyclerViewHelper 。功能点详见README。
本次主要介绍针对TurboRecyclerView上拉/左滑的功能的实现及思路。
下面直接进入正题…
本文档主要用于帮助Android开发人员规范代码及资源文件命名等,使大家尽量保证一个整洁的编程风格。
本命名规范主要基于骆驼命名规则(对于这个都保证不了的代码简直不能忍)。
# 所有的名称命名应该简洁而富有意义,尽量使用完整单词。增加必要的注释。
# 除非该缩写被更广泛的使用,例如URL、HTML。
# 包名由小写的字母组成,例如以 cc.solart.<业务模块名>.<子模块名>命名
# 一个模块是一个功能相对独立的模块,应谨慎创建新的模块名
# 类名的首字母必须大写,如果由多个单词组成,多个单词直接连接,每个单词的首字母必须大写,其他字母小写。例如:public class LoginActivity
# 类的域定义考量, 非公开类不要用public(注意类的有效作用域)