![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
插件化
文章平均质量分 97
Luckie stone
Android应用开发。
展开
-
Android插件化资源的使用
//创建我们自己的ResourceString apkPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/chajian_demo.apk";//创建AssetManagerassetManager = AssetManager.class.newInstance();Method addAsse...原创 2018-05-14 13:44:23 · 505 阅读 · 0 评论 -
插件占坑,四大组件动态注册前奏(二) 系统Service的启动流程
前言:为什么要了解系统Activity,Service,BroadCastReceiver,ContentProvider的启动流程,这是一个对于即将理解插件中的四大组件动态注册,占坑的前提,如果不了解的话,那么很难了解插件hook哪些东西,又是如何骗过AMS来启动Activity,Service,BroadCastReceiver,ContentProvider?本节主要记录系统Servic...转载 2018-05-15 08:00:21 · 614 阅读 · 0 评论 -
Android源码分析-资源加载机制
前言我们知道,在activity内部访问资源(字符串,图片等)是很简单的,只要getResources然后就可以得到Resources对象,有了Resources对象就可以访问各种资源了,这很简单,不过本文不是介绍这个的,本文主要介绍在这套逻辑之下的资源加载机制资源加载机制很明确,不同的Context得到的都是同一份资源。这是很好理解的,请看下面的分析得到资源的方式为context....转载 2018-08-19 07:28:29 · 157 阅读 · 0 评论 -
Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
前言为了更好地阅读本文,你需要先阅读Android apk动态加载机制的研究这篇文章,在此文中,博主分析了Android中apk的动态加载机制,并在文章的最后指出需要解决的两个复杂问题:资源的访问和activity生命周期的管理,而本文将会分析这两个复杂问题的解决方法。需要说明的一点是,我们不可能调起任何一个未安装的apk,这在技术上是无法实现的,我们调起的apk必须受某种规范的约束,只有在这...转载 2018-08-19 07:28:15 · 160 阅读 · 0 评论 -
Android apk动态加载机制的研究
背景问题是这样的:我们知道,apk必须安装才能运行,如果不安装要是也能运行该多好啊,事实上,这不是完全不可能的,尽管它比较难实现。在理论层面上,我们可以通过一个宿主程序来运行一些未安装的apk,当然,实践层面上也能实现,不过这对未安装的apk有要求。我们的想法是这样的,首先要明白apk未安装是不能被直接调起来的,但是我们可以采用一个程序(称之为宿主程序)去动态加载apk文件并将其放在自己的进程...转载 2018-08-19 07:28:06 · 182 阅读 · 0 评论 -
详解Android插件化开发-资源访问
动态加载技术(也叫插件化技术),当项目越来越庞大的时候,我们通过插件化开发不仅可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。 通常我们把安卓资源文件制作成插件的形式,无外乎有一下几种:zip、jar、dex、APK(未安装APK、安装APK) 对于用户来讲未安装的APK才是用户所需要的,不安装、不重启,无声无息的加载资源...转载 2018-07-11 06:20:45 · 407 阅读 · 0 评论 -
深入理解Android插件化技术
插件化提要可以说,插件化技术涉及得非常广泛,其中最核心的就是Android的类加载机制和反射机制,相关原理请大家自行百度。插件化发展历史插件化技术最初源于免安装运行apk的想法,这个免安装的apk可以理解为插件。支持插件化的app可以在运行时加载和运行插件,这样便可以将app中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现app功能的动态扩展。想要实现插件...转载 2018-07-11 06:20:33 · 11659 阅读 · 3 评论 -
Android ClassLoader详解
我们知道不管是插件化还是组件化,都是基于系统的ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并,优化,然后生成一个最终的class.dex,目的是把不同class文件重复的东西只需保留一份,如果我们的Android应...转载 2018-07-11 06:20:23 · 500 阅读 · 0 评论 -
Android动态加载Activity原理
activity的启动流程加载一个Activity肯定不会像加载一般的类那样,因为activity作为系统的组件有自己的生命周期,有系统的很多回调控制,所以自定义一个DexClassLoader类加载器来加载插件中的Activity肯定是不可以的。首先不得不了解一下activity的启动流程,当然只是简单的看一下,太详细的话很难研究清楚。通过startActivity启动后,最终通过A...转载 2018-07-11 06:20:15 · 2519 阅读 · 0 评论 -
Android中插件开发篇之----动态加载Activity(免安装运行程序)
1、第一种方式:使用反射机制修改类加载器来实现动态加载Activity首先来看一个例子:360安全卫士在主界面有一个添加更多工具的菜单,点进去之后,可以看到有很多功能选项。我们添加一个手机防盗的功能:有一个进度条开始添加。那么我们如何知道他是使用动态加载的呢?我们可以去查看他的数据文件目录:我们可以看到有两个目录,比较见名知意:app_plugins_v3app_plugins_...转载 2018-07-11 06:20:04 · 1454 阅读 · 1 评论 -
Android中插件开发篇之----应用换肤原理解析
我们先来看一个市场上的一个app具有的换肤功能的例子:QQ空间点击我的空间=>个性化=>原创主题=>选择下载主题下载主题,然后可以替换了。接下来我们看看这个主题包放到哪了?因为既然下载肯定是存放起来了。两个地方可以放:一个是SD卡,一个是应用的数据目录我们先来看看应用的目录(配置好了adb命令):第一步:得到QQ空间的的包名:打开QQ空间app,不要退出。...转载 2018-07-11 06:19:56 · 220 阅读 · 0 评论 -
Android中插件开发篇之----类加载器
一、预备知识Android中的各种加载器介绍插件开发的过程中DexClassLoader和PathClassLoader这两个类加载器了是很重要的,但是他们也是有区别的,而且我们也知道PathClassLoader是Android应用中的默认加载器。他们的区别是:DexClassLoader可以加载任何路径的apk/dex/jarPathClassLoader只能加载/data/app中的apk,...转载 2018-07-11 06:19:43 · 415 阅读 · 0 评论 -
Android中的动态加载机制
在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势。本文对网上Android动态加载jar的资料进行梳理和实践在这里与大家一起分享,试图改善频繁升级这一弊病。Android应用开发在一般情况下,常规的开发方式和代码架构就能满足我们的普通需求。但是有些特殊...转载 2018-07-11 06:19:30 · 390 阅读 · 0 评论 -
Java类加载器详解
首先来了解一下字节码和class文件的区别:我们知道,新建一个java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的bin目录下)指定的目录下的.class文件,类加载需要将.class文件导入到硬盘中,经过一些处理之后变成字节码在加载到内存中。下面来看一下简单的例子:package com.loadc...转载 2018-07-10 06:20:41 · 162 阅读 · 0 评论 -
DexClassLoader和PathClassLoader的区别
在使用Java虚拟机时,我们经常自定义继承自ClassLoader的类加载器。然后通过defineClass方法来从一个二进制流中加载Class。而在Android中我们无法这么使用,Android中ClassLoader的defineClass方法具体是调用VMClassLoader的defineClass本地静态方法。而这个本地方法什么都没做,只是抛出了一个“UnsupportedOp...转载 2018-03-16 08:27:40 · 3380 阅读 · 0 评论 -
插件化开发技术原理
插件化开发技术的核心就是DexClassLoader类。它的构造方法:publicDexClassLoader (StringdexPath,StringdexOutputDir,StringlibPath, ClassLoaderparent)参数详解:dexPath:dex文件路径列表,多个路径使用”:”分隔dexOutputDir:经过优化的dex文件(odex)文件输出目录...原创 2018-04-16 06:44:20 · 816 阅读 · 0 评论 -
插件占坑,四大组件动态注册前奏(一) 系统Activity的启动流程
前言:为什么要了解系统Activity,Service,,BroadCastReceiver,ContentProvider的启动流程,这是一个对于即将理解插件中的四大组件动态注册,占坑的前提,如果不了解的话,那么很难了解插件hook哪些东西,又是如何骗过AMS来启动Activity,Service,BroadCastReceiver,ContentProvider?本节主要记录系统Activ...转载 2018-05-15 08:00:16 · 336 阅读 · 0 评论 -
Android插件化原理
Activity 启动过程:1.startActivity的时候最终会走到AMS的startActivity方法。2.系统会检查一堆的信息验证这个Activity是否合法。3.然后会回调ActivityThread的Handler里的 handleLaunchActivity。4.在这里走到了performLaunchActivity方法去创建Activity并回调一系列生命周期的...原创 2018-05-14 15:49:43 · 357 阅读 · 0 评论 -
插件占坑,四大组件动态注册前奏(三) 系统BroadCast的注册发送流程
前言:为什么要了解系统Activity,Service,BroadCastReceiver,ContentProvider的启动流程,这是一个对于即将理解插件中的四大组件动态注册,占坑的前提,如果不了解的话,那么很难了解插件hook哪些东西,又是如何骗过AMS来启动Activity,Service,BroadCastReceiver,ContentProvider?本节主要记录系统BroadC...转载 2018-05-15 08:00:28 · 144 阅读 · 0 评论