做高通项目时碰高一个问题:有些apk在32位平台上运行没问题,但是在64位平台上出现crash,出错信息如下:

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.droidhen.game.racingmototer/.cache/libsecexe.so" is 32-bit instead of 64-bit
    at java.lang.Runtime.load(Runtime.java:332)
    at java.lang.System.load(System.java:1069)
    at com.secneo.guard.ACall.<clinit>(ACall.java:31)
    at com.secneo.guard.Util.addProvider(Util.java:52)
    at com.droidhen.api.scoreclient.ScoreClientProvider.onCreate(ContentProviderTemplate.java:155)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1748)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:1723)
    at android.app.ActivityThread.installProvider(ActivityThread.java:5153)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4748)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688)
    at android.app.ActivityThread.access$1600(ActivityThread.java:150)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

从crash log 来看好像是apk没有64位下的so库,确实是这样。但,奇怪的是在有些Android6.0 64位系统上同样的apk运行没问题。

后来抓了下log发现,apk在安装的时候。PackageManagerService 会调用 derivePackageAbi 推导apk可用的ABI。如果apk有so文件(32bit),

但找不到合适的ABI,运行时就会crash。初步判断是so的路径有问题。接着分析log,发现非系统的apk并且不支持多架构的,会先找lib文件夹,如果没有lib文件夹就扫描apk的assets

文件夹,来调整支持此apk的ABI。

最后跟到了,在扫描 assets 文件夹的时候 会调用 initAssetsVerifierLib打开一个库(libassetsverifier.so),悲剧的是,平台里面没有 这个库。扫描的结果是,系统认为 此apk没有 native code,也就是 没有so库。

解决办法:

修改 device-vendor.mk 文件添加

COMMON_LIBS := libassetsverifier

PRODUCT_PACKAGES += $(COMMON_LIBS)

将 libassetsverifier.so 编译进系统。问题解决。

涉及到的文件:

PackageManagerService.java

NativeLibraryHelper.java

PackageManager.java

com_android_internal_content_NativeLibraryHelper.cpp

verify_assets.cpp

Android6.0 高通平台 is 32-bit instead of 64-bit 问题相关推荐

  1. android 6.0 高通平台sensor 工作机制及流程(原创)

    最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...

  2. android 6.0 高通平台sensor 工作机制及流程

    最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...

  3. Android 7.0 高通平台-telephony-机器无Sim卡情况下,获取SIM卡状态方法getSimState偶现为6,而不是1

    TelephonyManager.java -------->getSimState接口 /** * Returns a constant indicating the state of the ...

  4. 高通平台USB 2.0和USB 3.0接口充电器识别原理

    1 BC 1.2 1.1 充电器类型探测 1)DCD:DP上有150mV(= 10uA x 15K欧姆下拉电阻)的电压,DM上电压为0 2)Primary Det(DP发起检测DM): - DP上加载 ...

  5. 华为鸿蒙或适配高通平台,鸿蒙2.0适配高通平台,网友:华为这是要取代安卓吗?...

    鸿蒙.鸿蒙.鸿蒙-- 近一段时间关于华为鸿蒙2.0手机端操作系统的消息越来越多,而且很多提前拿到内测版的童鞋也开始放出关于鸿蒙2.0手机端操作系统的体验与感受,这无疑把华为鸿蒙2.0手机操作系统的热度 ...

  6. 高通android开源代码下载,高通平台Android源码bootloader分析之sbl1(三)

    前两篇博文分析了启动流程.代码流程.cdt,接下来就分析另外几个需要格外关注的部分. ##log系统 sbl1中的log系统也是sbl1部分调试会经常接触得部分高通平台在sbl中做的log系统并不是很 ...

  7. 高通平台sensor学习

    刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...

  8. 高通平台android开发总结 MSM平台上的AMSS

    http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...

  9. 高通平台 lcd driver 调试小结

    一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2  开发环境 And ...

最新文章

  1. python爬虫获取的网页数据为什么要加[0-使用 Python 爬取网页数据
  2. java 转账 锁_Java多线程 多个人转账发生死锁
  3. boost::phoenix模块使用 istreambuf_iterator 测试 lambda 函数对象
  4. 人工大脑项目 —— Nengo
  5. [转]GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名
  6. aws lambda_API网关和AWS Lambda进行身份验证
  7. LeetCode 378. 有序矩阵中第K小的元素(二分查找)
  8. python字典按键值排序_在Python中按键或值按升序和降序对字典排序
  9. canvas笔记-图形变换(位移translate、缩放scale、变换矩阵transform)
  10. 服务器常规维修与判断方法,服务器常规维修与判断方法88119.doc
  11. [licode cs交互] 1 android client 连接到token服务器
  12. AGV机器人核心部件——驱动轮
  13. 极路由2刷机为openwrt固件
  14. 云服务器怎么存文件大小,云服务器怎么存文件大小
  15. cad画直角命令_在cad中怎么画角度?cad画角度三种方法介绍
  16. spring boot 多模块项目打包部署
  17. 使用ubuntu遇到的问题-An error occurred,please run Package Manager...
  18. 斐讯k3怎么设置虚拟服务器,斐讯K3路由器无线中继怎么设置?
  19. matlab 理想低通滤波器函数,基于MATLAB的理想低通滤波器的设计
  20. win7桌面图标全变成windows media center 解决办法

热门文章

  1. 下拉列表详解再详解,快速掌握!(内有代码)
  2. 什么是LRUCache 和 LRUCache 实现
  3. Linux platform
  4. WinSCP 以预设密码进行验证 拒绝访问
  5. 水平拉滑轮组计算机械效率的题,中考典型题:滑轮组机械效率分类计算(1).doc...
  6. win10 计算机 搜索文件,在 Windows 10 上高效搜文件,自带搜索功能其实就够了
  7. redis5大数据结构
  8. 通过xshell命令方式下载文件
  9. jmeter设置永久中文和解决查看结果树响应中文乱码问题
  10. 程序设计,就是这样——如何学习程序设计(完整版)