最近在NDK开发中遇到了一个奇怪的问题,希望记录下,可以帮到大家:
 
      我编译了一些 .so 动态库,只编译了armeabi-v7a、armeabi 指令集,其它指令集编译不了,具体原因还没查出。因为同时也调用了第三方的.so 动态库,而第三方提供7个指令集,分别为:arm64-v8a、armeabi、armeabi-v7a、mips、mips64、x86、x86_64。 所以,我只能把刚编译的动态库填充到 armeabi、armeabi-v7a 两个指令集目录。
 
  在JNI 调用的时候,有些手机调用成功,有些手机不行,成功的有:
(vivo Y51A) Android 系统为:5.1 ,支持指令集:armeabi-v7a、armeabi
(oppo r9s) Android 系统为:5.1 ,支持指令集:arm64-v8a、armeabi-v7a、armeabi
(魅族 note2) Android 系统为:5.1 ,支持指令集:arm64-v8a、armeabi-v7a、armeabi
 
 不成功的手机:
(华为 荣耀6) Android 系统为:7.0 ,支持指令集:arm64-v8a、armeabi-v7a、armeabi
(华为 mate9) Android 系统为:7.0 ,支持指令集:arm64-v8a、armeabi-v7a、armeabi
 
你可以通过 以下代码获取你手机支持的指令集:
String[] abis = new String[]{}; abis = Build.SUPPORTED_ABIS;
 
      一般64位芯片的手机都会兼容 32位的库,只是运行时性能慢一点。如华为 mate9 的芯片就是 64位的,它首先会 查询 字符数组 abis 支持指令集 的第一个元素:arm64-v8a,如果这个目录没有相应的 库,就会到第二个元素目录搜索, 以此类推。
我不确定是因为华为手机的问题, 还是 Android 7.0 系统的问题:当你在 jniLibs 目录下建立了 arm64-v8a,程序就会直接在 arm64-v8a 目录下查找,如果查找不到,就会直接报错,而不会去其它 指令集目录查找,错误提示为:
nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64, /vendor/lib64, /system
 
而上面列举成功的三款手机就会主动搜索 其它指令集目录下的库。这令我很疑惑,那我就尝试把
除 armeabi-v7a、armeabi 目录外的其它目录都删了,然后运行。 还是不行,各种尝试,都没有成功,后面我在 stackoverflow 找到一个解决方案,链接如下:
 
按照stackoverflow 的解决方案是:
找到apk 安装文件,然后用rar 之类的解压工具打开:
 
 
lib 目录,就是编译后的静态或者动态库目录,然后再进去看看:
 
      果然, lib 目录下 除 armeabi-v7a、armeabi 目录外,还有其它目录,我在 JniLibs目录下 删除了其它目录,根本没有起到作用,我觉得原因可能是之前 build 时候缓存了 这些目录,所以不管我怎么在 jniLibs 目录下删除其它指令集目录都没用。 你可以尝试在 Android Studio 的菜单 Build =》 clean Project,然后再运行项目。
 
     其次也可以 在 build.gradle 文件下 添加如下配置:
android {
splits {
abi {
enable true
reset()
include 'armeabi-v7a', 'armeabi'
}
}
}
     该配置是 让再构建build的时候只 加入armeabi-v7a', 'armeabi' 两种指令集。最后,大功告成,以上手机都运行通过。目前大多数第三方库 都已经提供 arm64-v8a 指令集, 所以最佳方案还是尽量去编译 arm64-v8a 指令集。
 
tips:华为手机在系统方面走得比较前,更新迭代快,对权限以及其它方面都比较多特殊的限制,对我们开发者来说是一种尝试,也是一种挑战,希望开发者不要忽视了它,毕竟它在大陆市场用户率不低。

NDK 开发中,各种指令集的坑,arm64的更多相关文章

  1. 记一次SpringBoot 开发中所遇到的坑和解决方法

    记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...

  2. Java 开发中如何正确踩坑

    为什么说一个好的员工能顶 100 个普通员工 我们的做法是,要用最好的人.我一直都认为研发本身是很有创造性的,如果人不放松,或不够聪明,都很难做得好.你要找到最好的人,一个好的工程师不是顶10个,是顶 ...

  3. 细数Python Flask微信公众号开发中遇到的那些坑

    最近两三个月的时间,断断续续边学边做完成了一个微信公众号页面的开发工作.这是一个快递系统,主要功能有用户管理.寄收件地址管理.用户下单,订单管理,订单查询及一些宣传页面等.本文主要细数下开发过程中遇到 ...

  4. 转:Flutter开发中踩过的坑

    记录一下入手Flutter后实际开发中踩过的一些坑,这些坑希望后来者踩的越少越好.本文章默认读者已经掌握Flutter初步开发基础. 坑1问题:在debug模式下,App启动第一个页面会很慢,甚至是黑 ...

  5. Android开发中需要注意哪些坑

    作为一个有两.三年Android应用开发经验的码农,自然会遇到很多坑,下面是我能够想起的一些坑(实践证明不记笔记可不是个好习惯),后面有想到其它坑会陆续补上. 1.在Android library中不 ...

  6. android -------- 解决NDK开发中的 Method 'NewStringUTF' could not be resolved

    创建NDK项目时, .cpp文件中出现错误, Method 'NewStringUTF' could not be resolved 如图: 网上看了很多解决方式 项目右键->属性->c/ ...

  7. 讲讲我在Windows10(uwp)开发中遇到的一些坑.

    7月29日发布的Windows10正式版,当天安装好以后,在网络不太好的情况下,经过多次尝试终于装上了Visual Studio 2015和Windows 10 10240的SDK.这两周一直在开发U ...

  8. vuejs 开发中踩到的坑

    用 v-for 循环式  每个item的值相等的情况下,会影响v-model的双向绑定: Modal 组件开发,主要用slot 标签来实现 <template> <transitio ...

  9. 那些年,我们在Django web开发中踩过的坑(一)——神奇的‘/’与ajax+iframe上传

    一.上传图片并在前端展示 为了避免前端整体刷新,我们采用ajax+iframe(兼容所有浏览器)上传,这样用户上传之后就可以立即看到图片: 上传前: 上传后: 前端部分html: <form s ...

随机推荐

  1. 阿里云Maven配置,Maven仓库配置,Maven镜像配置

    阿里云Maven配置,Maven仓库配置,Maven镜像配置 ======================== 蕃薯耀 2018年1月29日 http://www.cnblogs.com/fanshu ...

  2. 无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever

    今天分离附加数据库,分离出去然后再附加,没有问题.但是一把.mdf文件拷到其它文件夹下就出错,错误如下:    无法打开物理文件 "E:\db\homework.mdf".操作系统 ...

  3. 如何用Safari联调Hybrid APP

    随着Hybrid APP的流行,对其调试变得必不可少.使用Xcode我们能看到的仅仅是WebView,要想进一步查看里面的a标签.button和其他元素,Xcode是心有余而力不足.但是不用担心,Sa ...

  4. TemplateMethod-模板模式

    什么是Template Method模式 在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Mehtod模式.模板模式的关键是:子类可以置换掉父类的可变部分,但是子类却不可 ...

  5. JavaScript Hoisting

    Hoisting is JavaScript's default behavior of moving all declarations to the top of the current scope ...

  6. CColor类封装

    CColor类封装 Color.h #pragma once #include <sstream> #include <string> using namespace std; ...

  7. 阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO

    前言 在阅读<阿里巴巴Java开发手册>时,看到命名规则中有这样一条 虽然知道这些是根据Java对象的角色所分配名称的后缀,但是没有弄清楚分别是什么意思,日常开发中也没有使用到. 网上查找 ...

  8. 如何使用 volatile, synchronized, final 进行线程间通信

    原文地址:https://segmentfault.com/a/1190000004487149.感谢作者的无私分享. 你是否真正理解并会用volatile, synchronized, final进 ...

  9. POI一(介绍)

    POI(介绍) 玩j2e项目,在实际开发中经常会用到导入和导出功能,一般使用的都是excel.在这里整理一下有关POI的知识,本篇博客先做一个POI的介绍. 什么是Apache POI? Apache ...

  10. MoonLight可视化订单需求区域分析系统前端

    MoonLight可视化订单需求区域分析系统实现功能: 在现实生活中,计算机和互联网迅速发展,人们越来越趋向于网络,于是我们就有了各种各样的系统,来帮助我们更好地生活.比如对于打车来说,我们也可以通过 ...