0%

作者:Oz

版权声明:本文图文为博主原创,转载请注明出处。

概述

对于插件化框架 Hook 机制是一个核心,那到底 Hook 是什么呢?怎么去理解插件化中的 Hook 呢?在我看来插件化中的 Hook 机制就是通过反射注入动态代理来实现的。

先来说说何为反射注入,大家都知道依赖注入,其实反射注入算是依赖注入的一种,顾名思义,通过反射的方式将依赖对象注入目标对象。举个例子,想要替换掉 ActivityThread 中的 mInstrumentation

Read more »

作者:Oz

版权声明:本文图文为博主原创,转载请注明出处。

Java 类加载器

提到 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()来获取它。

Read more »

作者:Oz

版权声明:本文图文为博主原创,转载请注明出处。

这段时间在研究插件化相关的技术,追根溯源,所以干脆把Apk的安装流程梳理了一遍,与大家共享,望指正!

本文基于Android 5.1的源码,分析Apk安装流程。

Apk是Android Pakage的缩写,即Android安装包,Apk文件其实是zip格式,一般包含一个或多个dex文件、resources.arsc、AndroidManifest.xml、res目录、META-INF目录及包含so库的lib目录,这里就不在啰嗦。

Read more »

作者:Oz

版权声明:本文图文为博主原创,转载请注明出处。

大家有没有好奇过点击Launcher图标时,到唤起一个应用页面,这个流程会是怎么样的?本文的目的就是尽可能梳理清楚流程,能够让大家对整个流程有一个相对清晰的认知。

在我们开始之前,希望您能最好已经满足以下条件:

  • 有一份编译后的Android源码(亲自动手实践才会有更深入的理解)

  • 对Binder机制有一定的了解

本文启动流程分析基于Android 5.1的源码。为什么是5.1的源码呢?因为手边编译完的代码只有这个版本…另外,用什么版本的源码并不重要,大体的流程并无本质上的区别,仅仅是实现细节的调整,找一个你熟悉的版本就好。

Read more »

作者:Oz

插件化技术(也叫动态加载技术)在技术驱动型的公司中扮演着相当重要的角色,当项目越来越庞大的时候,需要通过插件化来给应用瘦身,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。对于业务迭代较快的公司,可以减少发包次数而且有很好的覆盖度。

以下为这段时间学习插件化的一些笔记或摘要及自己的一些理解。

Read more »

自从使用了RecyclerView再也回不去了,什么ListView、GridView统统让他们退休了。必须安利起来,用了才能体会它的神奇!

根据使用RecyclerView以来,拓展的一些功能及对RecyclerView.Adapter的封装,想在这里跟大家分享一些经验,还望指正。

功能介绍

基于对RecyclerView在使用过程中的一些痛点写了这个开源项目 TurboRecyclerViewHelper 。功能点详见README。

本次主要介绍针对TurboRecyclerView上拉/左滑的功能的实现及思路。

下面直接进入正题…

Read more »

概述

本文档主要用于帮助Android开发人员规范代码及资源文件命名等,使大家尽量保证一个整洁的编程风格。

Java 命名规范

本命名规范主要基于骆驼命名规则(对于这个都保证不了的代码简直不能忍)。

不要使用拼音命,避免使用缩写

# 所有的名称命名应该简洁而富有意义,尽量使用完整单词。增加必要的注释。

# 除非该缩写被更广泛的使用,例如URL、HTML。

包的命名

# 包名由小写的字母组成,例如以 cc.solart.<业务模块名>.<子模块名>命名

# 一个模块是一个功能相对独立的模块,应谨慎创建新的模块名

类的命名

# 类名的首字母必须大写,如果由多个单词组成,多个单词直接连接,每个单词的首字母必须大写,其他字母小写。例如:public class LoginActivity

# 类的域定义考量, 非公开类不要用public(注意类的有效作用域)

抽象类、接口的命名

Read more »

作者:Oz

当前越来越多的app中嵌入H5,想跟大家分享一下具体在项目中的使用和设计,故写了这个开源项目,欢迎大家批评指正。

在这里介绍一下OpenWeb项目基础的框架设计。

功能介绍

基于WebView设计的H5页面的加载框架,可以自动管理回退栈,可以支持js与native的交互,可配合下拉刷新控件,可修改横向进度条。

设计

Read more »

Welcome to Solartisan!

这个博客主要是为了贡献高质量的技术分析及开源项目,目前主要深耕移动端Android方向。欢迎更多的朋友加入我们!

Github Solartisan