阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 提问 本文的结论是跟着 System.loadlibrary() 一层层源码走进去,个人对其的理解所整理的,那么开始看源码之前,先来提几个问题: Q1:你知道 so 文件的加载流程吗? Q2:设备存放 so 的路径有 system/lib,vendor/lib,system/lib64,vendor/lib64,知道在哪里规定了这些路径吗?清楚哪些场景下系统会去…
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680Android提供了一种非常灵活的资源系统,可以根据不同的条件提供可替代资源.因此,系统基于很少的改造就能支持新特性,比如Android N中的分屏模式.这也是Android强大部分之一.本文主要讲述Android资源系统的实现原理,以及在应用开发中需要注意的事项. 一.定义资源 Android使用XML文件描述各种资源,包括字符串.颜色.尺寸.主题.布局.甚至是…
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 Class文件 Class文件是Java虚拟机定义并被其所识别的文件格式,通俗地讲,每一个接口或者类对应一个Class文件. Class文件格式 Class文件是一组以8位字节为基础单位的的二进制流. 各数据项目之间没有任何分隔符 Class文件格式采用的结构只有两种数据结构:无符号数和表. 无符号数:以u1,u2等表示1,2个字节的无符号数,无符号数可用于描述…
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本文将继续通过Service调用原理来解读Replugin插件化技术 一.开启插件内Service 第1步在<Replugin插件化技术解读之框架初始化.插件安装与加载(二)>中我们知道插件在加载的时候会自动生成PluginContext来作为插件内上下文使用,而插件中startService其实调用的就是已经被重写的startService方法了. Plug…
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本文通过Activity调用原理来解读Replugin插件化技术 一.开启插件Activity流程 第1步开启插件Activity的入口在Replugin.StartActivity(Context context, Intent intent),其他intent内部一定要传入想要开启的插件名. public static boolean startActivi…
通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特别是大部分知识都需要结合虚拟机和Androidframwork的原理才能慢慢理解.比如,文中作者提到了插件化框架要解决的三个核心问题: 1)插件类的加载: 2)插件资源的处理: 3)Activity注册和生命周期问题: 其中第3点作者是这样解释的,“大部分插件化框架解决办法都是采用在宿主工程里预先注册Acti…
我们可以利用DexClassLoader来实现动态加载dex文件,而很多资料也只是对于DexClassLoader的使用进行了介绍,没有深入讲解dex的动态加载机制,我们就借助于Android4.4的源码来探索.先从一个简单的动态加载dex文件开始 具体实现细节可以参考这篇文章AndroidDex数据动态加载技术 Android4.4的源码在百度网盘分享: Android 4.4源码下载 先是我们要封装到text.jar文件中的很简单的调用函数,只是简单的产生Toast: /* * 对外接口 *…
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 最近碰到一些 so 文件问题,顺便将相关知识点梳理一下. 提问 本文的结论是跟着 System.loadlibrary() 一层层源码走进去,个人对其的理解所整理的,那么开始看源码之前,先来提几个问题: Q1:你知道 so 文件的加载流程吗? Q2:设备存放 so 的路径有 system/lib,vendor/lib,system/lib64,vendor/lib64,知道在哪里规定了这些路径吗?清楚哪些场景下系统会去哪个目录下…
在学习Java反射的技术后,我们可以开始更深一步的探究插件化开发了.首先先讲一下Android App的打包流程,然后我们通过一个简单的例子 —— 实现插件化加载外部Dex来完成初级的插件化开发的探索. 一.Android App 打包流程 1. 打包资源文件,生成R.java文件 打包资源的工具是aapt,在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java,另外AndroidManifest.xml会被aapt编译成二进制.存放…
类加载的命名空间 每个类加载器都有自己的命名空间,命名空间由所有以此加载器为初始类加载器的类组成,不同命名空间的两个类是不可见的,但只要得到类所对应的Class对象的refrence(反射),还是可以访问另一个命名空间的类信息的. 同一个命名空间内的类是相互可见的,子加载器的命名空间包含所有父加载器的命名空间,也就是说由子加载器加载的类能看到父加载器加载的类.例如:系统类加载器加载的类能看到根类加载器加载的类(用户自定的类可以访问java.lang.*包下的信息),由父加载器加载的类不能看到子加…