so文件为什么不能调试进去|linux上so文件可以直接运行吗

|

『壹』 安卓手机如何打开.so文件

01

安卓手机打开.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 platformARM结构的程序,不可以在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架构的。


赞 (0)