--摘自《android插件化开发指南》

1.local.properties添加配置

ndk.dir=/Users/jianqiang/Library/Android/sdk/ndk-bundle

2.gradle.properties添加配置

android.useDeprecatedNdk=true

3.Android只支持3种CPU类型:x86体系、arm体系、mips体系,现在手机基本arm体系

4.arm体系分为32位和64位

  1)armeabi/armeabi-v7a是32位,缺少对浮点数计算的硬件支持

  2)arm64-v8a是64位,主要用于Android5.0

5.arm体系乡下兼容,32位的so可以在64位系统运行。android每启动一个app,都会为app创建一个虚拟机,android64位系统,加载32位so或者app时,会同时创建64位和32位的虚拟机,这样就能兼容32位app

6.查看手机CPU型号

abilist是按顺序加载的,如果前面的目录下有so库,就不会加载后面的目录

7.加载so的两种方法

  1)加载jniLibs下的so库

System.loadLibrary("so库名");

  2)加载任意路径下的so库

System.load("so库路径");

针对第二种,我们可以实现so的动态加载:把so放在服务器上,app下载到手机后,再加载

但有个问题:64位虚拟机无法加载非jniLibs路径下的32位so库,所以我们可以先写个超级简单的so库,放在jniLibs的armeabi-v7a下占位就可以了

然后先loadLibrary占位的so库,在load我们下载下来的so库

动态加载的好处是减少apk的体积

8.DexClassLoader构造函数的第3个参数就是apk中so文件的路径,多个so用逗号连接

1)宿主解析每个插件的时候,为每个插件都创建了一个DexClassLoader,我们把每个插件的so文件的路径用逗号连接起来,放在DexClassLoader的构造函数的第3个参数中,这样无论宿主还是插件,都可以通过System.loadLibrary来加载这些so

2)或者插件中的so交给插件自己用System.load加载

欢迎关注我的微信公众号:安卓圈

so插件化的更多相关文章

  1. Android组件化和插件化开发

    http://www.cnblogs.com/android-blogs/p/5703355.html 什么是组件化和插件化? 组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Modul ...

  2. ASP.NET MVC 插件化机制

    概述 nopCommerce的插件机制的核心是使用BuildManager.AddReferencedAssembly将使用Assembly.Load加载的插件程序集添加到应用程序域的引用中.具 体实 ...

  3. Android 插件化

    1.介绍 涛哥写的文章  <Android 插件化的 过去 现在 未来> http://kymjs.com/code/2016/05/04/01#rd

  4. Android Small插件化框架源码分析

    Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...

  5. TinyFrame升级之八:实现简易插件化开发

    本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...

  6. Android 插件化 动态升级

    最新内容请见原文:Android 插件化 动态升级 不少朋友私信以及 Android开源交流几个 QQ 群 中都问到这个问题,这里简单介绍下 1.作用 大多数朋友开始接触这个问题是因为 App 爆棚了 ...

  7. Android的Proxy/Delegate Application框架 (主要介绍插件化开发)

    1. 插件化的原理 是 Java ClassLoader 的原理:Java ClassLoader基础 常用的其他解决方法还包括:Google Multidex,用 H5 代替部分逻辑,删无用代码,买 ...

  8. Android插件化开发

    客户端开发给人的印象往往是小巧,快速奔跑.但随着产品的发展,目前产生了大量的门户型客户端.功能模块持续集成,开发人员迅速增长.不同的开发小组开发不同的功能模块,甚至还有其他客户端集成进入.能做到功能模 ...

  9. 携程Android App插件化和动态加载实践

    携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实 ...

  10. [原创]Android插件化的一种实现

    Android的插件化已经是老生常谈的话题了,插件化的好处有很多:解除代码耦合,插件支持热插拔,静默升级,从根本上解决65K属性和方法的bug等等. 下面给大家介绍一下我们正在用的插件化框架.本片主要 ...

随机推荐

  1. iOS 运行时使用(交换两个方法)

    举例 在创建了如下代码 NSString *str=nil; NSURL *url =[NSURL URLWithString:str]; NSLog(@"%@",url); 但是 ...

  2. linux文件与目录管理笔记

    ### Linux文件与目录管理 ---------- 绝对路径: / 相对路径:不以/开头的 当前目录 . 上一个工作目录 - 用户主目录 ~ root账户的主目录是/root 其他用户是/home ...

  3. ignitius and princess 2(全排列)

    A - Ignatius and the Princess II Now our hero finds the door to the BEelzebub feng5166. He opens the ...

  4. 条件为空的sql你们写过么 (我也是醉了碰到了这种需求,当时还真有点o((⊙﹏⊙))o懵逼.jpg)

    需求描述:单表,父子关系,有个统一的主键dict_id和一个父级别的parent_id,查询父级别的字典名称,parent_id是空,本渣用的是mybatis奥!!! 废话不多说,直接上代码mappe ...

  5. jsp 监听器

    Servlet API提供了一系列的事件和事件监听接口. 上层的servlet/JSP应用能够通过调用这些API进行事件 驱动的开发.这里监听的所有事件都继承自 java.util.Event对象.监 ...

  6. uva11426 欧拉函数应用,kuangbin的筛法模板

    /* 给定n,对于所有的对(i,j),i<j,求出sum{gcd(i,j)} 有递推式sum[n]=sum[n-1]+f[n] 其中f[n]=gcd(1,n)+gcd(2,n)+gcd(3,n) ...

  7. Java 获取窗口的宽、高

    创建一个新窗口,通过getSize()获取这个窗口的宽.高. import javax.swing.JFrame; public class WindowInTheMiddle extends JFr ...

  8. txt提取文件中包含特定内容的内容

    @set/p str= 请输入要查找的内容: findstr " >%~1_查找内容.txt

  9. C++ Primer 笔记——嵌套类 局部类

    1.嵌套类是一个独立的类,与外层类基本没什么关系.特别的是,外层类的对象和嵌套类的对象是相互独立的.在嵌套类的对象中不包含任何外层类定义的成员,在外层类的对象中也不包含任何嵌套类定义的成员. 2.嵌套 ...

  10. 跨域 XMLHttpRequest对象

    XMLHttpRequest对象是ajax编程的基础,用于发送请求(数据)与服务端进行交互. 目前主流浏览器都内置了XMLHttpRequest对象. 浏览器会使用XMLHttpRequest对象来创 ...