安卓手机打开.so文件需要下载Native Libs Monitor这个app,这个应用可以帮助我们理解手机上安装的APK用到了哪些.so文件,以及.so文件来源于哪些函数库或者框架。我们也可以自己对app反编译来获取这些信息。
so文件是手机的一些运行库文件,在系统lib的文件夹下,置换移植其他系统的程序也需要修改更换相关so文件;没有它系统软件不能运行,哪部分损坏就影响相对功能,电话接打,通讯录,相机等等都是要依赖so文件使用的。so文件需要资深安卓大师更改,一般都是现成的搬运移植,打开它没有什么意义。安卓手机想要查看.so文件就需要下载Native Libs Monitor。
so是shared object的缩写,见名思义就是共享的对象,机器可以直接运行的二进制代码。大到操作系统,小到一个专用软件,都离不开so。so主要存在于Unix和linux系统中。so是与平台相关的二进制机器码,Android应用支持的cpu架构取决于APK中位于lib或jniLib目录中的.so文件。
由于Android基于Linux Kernl的,也继承了Linux中所有so相关的设计。
除了系统方面的原因,Android开发者还要知道以下几点:
so机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码。
so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快。
so内存分配不受Dalivik/ART的单个应用限制,减少OOM。
『贰』 linux上.so文件可以直接运行吗
那肯定能被执行啊,看下面图 内核中是把EXEC类型和DYN(就是DYN)都放开执行的
执行是能执行(如/lib64/libc-xx.so),但如果不特殊处理下 一般so执行都会报段错误的, 给你的so加个.interp节指定下连接器地址并指定下入口函数就可以了正常执行了哈
『叁』 在使用jni调用so库时出现的找不到文件是怎么回事
ossible cause: can't load ARM-bit .so on a IA 32-bit platform
ARM结构的程序,不可以在X86结构的CPU上执行
『肆』 安卓apk解压后得到的.so文件能直接放项目里面调用里面的方法吗
使用Androidstudio创建一个Android项目
打开Androidstudio创建一个项目,命名为tryndk
在项目中新创建一个类,在其中声明native方法在src/main目录下创建一个工具类,用来存放native方法
在Javautils类创建两个方法,声明为native
然后选中项目,点击build->make project,在项目中的build->intermediates->classes->debug->com->example->tryndk下就能看见javautils.class文件了
在Androidstudio中打开终端(View->ToolWindows->Terminal)在terminal中进入到main目录中,然后在键入javah -d jni -classpath ../../build/intermediates/classes/debug com.example.tryndk.javautils记得debug 后面有个空格。然后就能在src/main目录下看到jni文件夹,里面存放了一个头文件com_example_tryndk_javautils.h,里面生成了函数声明,
Java_com_example_tryndk_javautils_getStringFromNative为方法名,其中getStringFromNative为在javautils文件中创建的getStringFromNative方法。
然后在jni目录下创建一个c文件命名为MyJni.c,实现相应的方法
方法中就是返回了一个字符串。
『伍』 Android Studio导入.so文件无法识别加载怎么回事导致app老是闪退
说明so有问题,或者so没有对应你手机的cpu架构的。