Android基础——动态加载so库

Android中动态加载so

原因:如果把so文件直接放在libs目录下,在android程序启动的时候会默认加载libs目录下的所有so库,但这些so库可能会在某些地方存在冲突,使用动态加载so库,就可以通过一些条件判断是否要加载这个so库。
介绍:so的动态加载是把so库打包成apk的时候剔除,在合适的时候通过网络包下载的方式,在运行的时候进行分离加载。
优点:so文件是动态加载的,不是绑定死的,更便于修改,在so库有问题的时候可以动态更新;
so库文件动态加载可以极大地减小apk包的体积;
解决多个第三方库文件同时加载可能出现冲突的问题。

一、Android的so库文件的加载

  1. Android中加载so:
    (1)调用load()方法,传递so文件的绝对路径;
    (2)调用loadLibrary()方法,传递so文件的名称,而且so文件必须放在apk的lib目录下,而且so的名称必须去掉前面的lib和后边的“.so”。
    只能加载两个目录下的so文件:
    (1)/system/lib
    (2)应用程序安装包的路径:/data/data/packgename/…
    对于两种加载so文件的方法,在Android源码System.java中可以看到
    源码链接
    public static void load(String filename) {
   
        Runtime.getRuntime().load0(Reflection.getCallerClass(), filename);
    }
        public static void loadLibrary(String libname) {
   
        Runtime.getRuntime().loadLibrary0(Reflection.getCallerClass(), libname);
    }
  1. 上边两种方法都调用了Runtime中的getRuntime函数,用来获取Runtime的实例
    源码链接
    public static Runtime getRuntime() {
   
        return currentRuntime;
    }
  1. 在加载so时也调用了loadLibrary0方法
    源码链接
    在loadLibrary0中可以看到根据ClassLoader是否为空,有两种不同的处理形式。
    private synchronized void loadLibrary0(ClassLoader loader, Class<?> callerClass, String libname) {
   
        if (libname
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值