So加载路径和注意事项


我们在Android应用程序会常常的加载一些So文件来完成我们的目标,那么我们的APK加载So是有哪些平时我们没有注意到的事情呢?


1. 首先我们一般开发会遇见两种APK(其实一般大部分只会遇到一种),一种为系统级APK,另外一种为普通APK。那么这个两种APK跟So加载有什么关系呢?别急,让我们先聊聊我们那些操作会产生这些类型的APK。

普通级AKP:

pm install + 包名     将会把APK安装到 /data/app 目录下,同时会把So映射到/data/app-lib/包命/ 目录下。这个就是普通的APK(pm Install -r 会替换原有的APK,当然必须是一样的签名)。


系统级APK:


push  + 绝对路径 + 包名 /system/app 目录下(必须把原有的包名删除哦!),这时APK就会在System/app下面了,这时你需要把你的APK的So 同时push到system/lib里面。因为apk里面的So并不会自动映射到system/lib下面。


一般我们在使用加载So的方法时候,会使用到System.load(pathName)和 System.loadLibrary(libName)这两种方法。这篇文章主要讲讲System.load(pathName)这个绝对路径加载的注意点。

我们通常会直接使用


context.getApplicationInfo().nativeLibraryDir +/具体名字.so  来让系统帮我寻找加载So所需要的路径。那么这里问题就来了。

如果是系统级APK

context.getApplicationInfo().nativeLibraryDir =/system/lib/

如果是普通级APK

context.getApplicationInfo().nativeLibraryDir =/data/data-lib/PackageName/ 对!就是那个映射的So系统会根据这个去data/app/包名下面寻找真正的So文件。


      这个需要注意的细节,主要用于在中间件,系统预置程序的研发人员与测试上面。我们在拿到芯片厂商给予调试模式的开发硬件上进行Demo和So的更换测试的时候,需要自己和测试都需要知道,自己安装的APK是什么类型,会加载什么路径,以免我们的底层老司机在帮忙测试问题的时候造成不必要的麻烦。我会在之后详细的与大家交流System.load(pathName)和 System.loadLibrary(libName)这两种方法在framework层与底层是怎么样找到具体的So的。









更多相关文章

  1. android HOME、back(按钮、事件)截取获得,综合解决方案和分析,包含an
  2. Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一
  3. 基于WebRTC的Android数字楼宇对讲系统回声消除
  4. 【评论】阿里云os,到底是不是android OS
  5. 当你说不行时,你应该说些什么:以Android播放midi为例
  6. 八大Android土鳖设计
  7. 【定制Android系统】Android(安卓)O 应用静默升级安装、安装后静
  8. Fm发射功能在车载android系统的应用
  9. Android(安卓)使用腾讯的TBS浏览器X5内核的集成加载pdf等文件

随机推荐

  1. Android培训---支持不同的平台版本
  2. 国内的几款比较著名的android系统
  3. EventBus源码详解(一):基本使用
  4. 程序中判断Android系统版本
  5. android调用本地服务示例
  6. Android一行命令上传你的项目到Jcenter/M
  7. [Android] Handler详解
  8. 谷安: 微软、苹果与谷歌的专利问题四格漫
  9. Android之 对话框 的使用
  10. 【Android(安卓)界面效果15】Android(安