前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 动态加载so文件

Android 动态加载so文件

作者头像
Oceanlong
发布2019-02-22 10:14:36
3.8K0
发布2019-02-22 10:14:36
举报

概述

在开发中,我们时常会遇到包体积过大的情况。其中,一个大的第三方so文件,经常会让人头痛。那么,能否动态加载.so文件呢?答案是可以的。

原理

我们知道,如果我们在工程中引入一个so文件,当我们用gradle编译打包时,gradle会将我们jniLibs中的so文件,打到APK包中的lib文件夹下。具体可以参考我的上篇博客

然后我们安装APK时,系统会将APK包lib文件夹中的so文件拷贝到APP的私有目录下。具体来说就是:

/data/user/0/[包名]/app_libs/

所以,我们可以将想要加载的so文件,在程序运行时,拷贝到APP的私有目录的对应位置中,然后使用

System.load(...);

加载我们需要的so文件。

代码语言:javascript
复制
        String soPath = Environment.getExternalStorageDirectory().toString() + "/libnative2-lib.so";
        File file = new File(soPath);
        if (file.exists()){
            File dir = context.getDir("libs", Context.MODE_PRIVATE);
            String targetDir = dir.getAbsolutePath()+"/libnative2-lib.so";
            FileUtils.copySdcardFile(file.toString(), targetDir);
            System.load(targetDir);
        }

如有问题,欢迎指正。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档