怎样新建jniLibs, RTLD_LAZY) failed: dlopen failed: "/data/app/com.itep.mt.dispatch-is too small to be an

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38998213/article/details/91043646

报错:E/art: dlopen("/data/app/com.itep.mt.dispatch-1/lib/arm/libCommunication.so", RTLD_LAZY) failed: dlopen failed: "/data/app/com.itep.mt.dispatch-1/lib/arm/libCommunication.so" is too small to be an ELF executable: only found 0 bytes

由于你的so库文件配置不行,仔细的查看你的目录是不是正确。

强调:jniLibs带有3条横线的文件夹,只有在Android 目录能看到,so库文件在projece和Android 目录查看是不同。新建jniLibs的时候实在project目录中main目录下新建目录,在将so文件放进去,在切换到Android目录就能看到3条横岗的文件夹了。:

armeabi/armeabi-v7a:这个架构是arm类型的,主要用于Android4.0之后的,cpu值32位的

x86/x86_64:这个架构是x86类型的,有32位和64位,占用的设备比例比较小

arm64-v8:这个架构是arm类型,主要用于Android5.0之后,cpu是64位的

这里可以看到,其中arm类型的是往下兼容策略,比如arm64-v8a肯定兼容armeabi/armeabi-v7a,也就是说armeabi/armeabi-v7a架构的so文件可以用在arm64-v8a的设备中的,而armeabi-v7a也是兼容armeabi的,但是因为cpu型号不同,所以arm体系和x86体系之间是不能相互兼容的。

加载:一种是直接System.loadLibrary方法加载工程中的libs目录下的默认so文件,这里的加载文件名是xxx,而整个so的文件名为:libxxx.so。还有一种是加载指定目录下的so文件,使用System.load方法,这里需要加载的文件名是全路径,比如:xxx/xxx/libxxx.so。

  1. 第一种方式,使用代码实现,先将Android studio 的工作目录的模式由Android 切换成project
    • Android Studio中如何生成jniLibs文件

    • 然后按照如下路径找gradle : app--src--main--build.gradle(记住,这里的gradle是你那个module 里的gradle,不是你整个项目的gradle),双击打开

      Android Studio中如何生成jniLibs文件

    • 在bulidTypes {} 结束后添加此段代码,

      sourceSets{  

            main{  

                jniLibs.srcDirs=['libs']  

            }  

        }  

      记住该段代码是包含在android{} 里头的

      Android Studio中如何生成jniLibs文件

      Android Studio中如何生成jniLibs文件

    • 点击右上角sync now 然后同步一下即可

      Android Studio中如何生成jniLibs文件

    • 同步之后,将模式切换成Android后的效果如下

      Android Studio中如何生成jniLibs文件

    • 第二方式,是在通过右击新建,重复步骤1,找到如下路径app--src--main,右击main 文件夹 ,选择New ,新建Directory

      Android Studio中如何生成jniLibs文件

    • 然后文件夹命名jniLibs,往里头添加so 文件后就在目录中就能像res文件夹 显示了

      Android Studio中如何生成jniLibs文件

猜你喜欢

转载自blog.csdn.net/qq_38998213/article/details/91043646