android 5.0 64bit系统加载库文件失败问题浅析

VirtualBox 7.0.8下Android-x86_64系统安装与GRUB配置实战指南 本文详细介绍了在VirtualBox 7.0.8虚拟机中安装和配置Android-x86_64系统的完整步骤,包括环境准备、虚拟机设置、系统安装、GRUB引导调整及常见问题解决。特别针对开发者和测试人员,提供了优化配置和实用技巧,帮助快速搭建高效的Android虚拟环境。 阅读详情

最近公司的一个项目使用android 5.0 64 bit平台,相对以前版本,除了android 5.0 有很大变动之外,64 bit系统和32 bit系统也存在很多差异性。

目前碰到的问题就是以前在32位上的so库文件,到64 位系统上不能加载的问题。首先来看一下相关log信息

logcat信息:

01-01 08:00:09.322 D/SensorService( 1606): nuSensorService starting...
01-01 08:00:09.323 E/HAL  ( 1606): load: module=/system/lib64/hw/sensors.default.so
01-01 08:00:09.323 E/HAL  ( 1606): dlopen failed: "/system/lib64/hw/sensors.default.so" is 32-bit instead of 64-bit
01-01 08:00:09.323 E/SensorService( 1606): couldn't load sensors module (Invalid argument)

ps信息:

USER     PID   PPID  VSIZE  RSS     WCHAN    PC        NAME

root      1172  1     1254940 56612 ffffffff 8e579300 S zygote64
root      1173  1     940684 49112 ffffffff f75da8a8 S zygote
shell     1174  1     4136   956   000b45f4 9bcef2e8 S /system/bin/sh

system    1606  1172  1411680 87808 ffffffff 8e579b88 S system_server
u0_a11    1730  1172  1298048 43684 ffffffff 8e579b88 S com.android.systemui
root      1742  1174  4136   976   000b45f4 8d71b2e8 S sh

从上面的log信息我们可以得出如下信息:

1. 64 bit 系统启动后,会运行两个进程zygote64 ,zygote ,对应的进程号为1172 和1173

2.sysrem_server进程由zygote64 启动,它的进程号为1606

3.logcat 信息里面提示的错误信息,是在sysrem_server进程调用的,也就是说sensors.default.so库是在进程sysrem_server中去加载的。

综合上面信息,不难发现,sysrem_server是由zygote64启动的,所以加载的so库也必须是64bit类型。否则就会报如下错误

dlopen failed: "/system/lib64/hw/sensors.default.so" is 32-bit instead of 64-bit

为了解决这个问题,就必须把原来so文件的源码,放到64 bit的编译环境下编译。

首先,我直接复制源码到64 bit的android源码下编译,没有做任何修改,编译信息如下,

build/core/shared_library.mk:12: sensors.default: LOCAL_MODULE_PATH for shared libraries is unsupported in multiarch builds, use LOCAL_MODULE_RELATIVE_PATH instead
Import includes file: out/target/product/coconut/obj_arm/SHARED_LIBRARIES/sensors.default_intermediates/import_includes
target thumb C: sensors.default_32 <= external/tcl_sensors/sensors.c
external/tcl_sensors/sensors.c: In function 'sensors__get_sensors_list':
external/tcl_sensors/sensors.c:203:63: warning: unused parameter 'module' [-Wunused-parameter]
 static int sensors__get_sensors_list(struct sensors_module_t* module,
                                                               ^
target SharedLib: sensors.default_32 (out/target/product/coconut/obj_arm/SHARED_LIBRARIES/sensors.default_intermediates/LINKED/sensors.default.so)
Import includes file: out/target/product/coconut/obj/SHARED_LIBRARIES/sensors.default_intermediates/import_includes
target  C: sensors.default <= external/tcl_sensors/sensors.c
external/tcl_sensors/sensors.c: In function 'sensors__get_sensors_list':
external/tcl_sensors/sensors.c:203:63: warning: unused parameter 'module' [-Wunused-parameter]
 static int sensors__get_sensors_list(struct sensors_module_t* module,
                                                               ^
target SharedLib: sensors.default (out/target/product/coconut/obj/SHARED_LIBRARIES/sensors.default_intermediates/LINKED/sensors.default.so)
target Symbolic: sensors.default (out/target/product/coconut/symbols/system/lib64/hw/sensors.default.so)
Export includes file: external/tcl_sensors/Android.mk -- out/target/product/coconut/obj/SHARED_LIBRARIES/sensors.default_intermediates/export_includes
target Strip: sensors.default (out/target/product/coconut/obj/lib/sensors.default.so)
Export includes file: external/tcl_sensors/Android.mk -- out/target/product/coconut/obj_arm/SHARED_LIBRARIES/sensors.default_intermediates/export_includes
target Strip: sensors.default_32 (out/target/product/coconut/obj_arm/lib/sensors.default.so)
Install: out/target/product/coconut/system/lib64/hw/sensors.default.so

在/system/lib64/hw/目录下面生成了库文件sensors.default.so,然后我把该库文件替换到终端里面,既然发现还是会出现和上面一样的错误,找不到so库。

在网上查了一下资料,很少相关介绍,这个时候感觉没思路了,找不到问题突破点。

后来再编译操作了一遍,发现了一条很重要的信息提示,

build/core/shared_library.mk:12: sensors.default: LOCAL_MODULE_PATH for shared libraries is unsupported in multiarch builds, use LOCAL_MODULE_RELATIVE_PATH instead

这个信息提示已经说得很明白,然后我查看了一下android.mk文件,果断的把LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw语句改成了

LOCAL_MODULE_RELATIVE_PATH := hw,然后再重新编译。log如下

Import includes file: out/target/product/coconut/obj/SHARED_LIBRARIES/sensors.default_intermediates/import_includes
target  C: sensors.default <= external/tcl_sensors/sensors.c
external/tcl_sensors/sensors.c: In function 'sensors__get_sensors_list':
external/tcl_sensors/sensors.c:203:63: warning: unused parameter 'module' [-Wunused-parameter]
 static int sensors__get_sensors_list(struct sensors_module_t* module,
                                                               ^
target SharedLib: sensors.default (out/target/product/coconut/obj/SHARED_LIBRARIES/sensors.default_intermediates/LINKED/sensors.default.so)
target Symbolic: sensors.default (out/target/product/coconut/symbols/system/lib64/hw/sensors.default.so)
Export includes file: external/tcl_sensors/Android.mk -- out/target/product/coconut/obj/SHARED_LIBRARIES/sensors.default_intermediates/export_includes
target Strip: sensors.default (out/target/product/coconut/obj/lib/sensors.default.so)
Install: out/target/product/coconut/system/lib64/hw/sensors.default.so
Import includes file: out/target/product/coconut/obj_arm/SHARED_LIBRARIES/sensors.default_intermediates/import_includes
target thumb C: sensors.default_32 <= external/tcl_sensors/sensors.c
external/tcl_sensors/sensors.c: In function 'sensors__get_sensors_list':
external/tcl_sensors/sensors.c:203:63: warning: unused parameter 'module' [-Wunused-parameter]
 static int sensors__get_sensors_list(struct sensors_module_t* module,
                                                               ^
target SharedLib: sensors.default_32 (out/target/product/coconut/obj_arm/SHARED_LIBRARIES/sensors.default_intermediates/LINKED/sensors.default.so)
target Symbolic: sensors.default_32 (out/target/product/coconut/symbols/system/lib/hw/sensors.default.so)
Export includes file: external/tcl_sensors/Android.mk -- out/target/product/coconut/obj_arm/SHARED_LIBRARIES/sensors.default_intermediates/export_includes
target Strip: sensors.default_32 (out/target/product/coconut/obj_arm/lib/sensors.default.so)
Install: out/target/product/coconut/system/lib/hw/sensors.default.so

注意看这次的log信息,没有上面的提示信息,并且还有一个关键的不同点,就是在system/lib64/hw 和system/lib/hw两个目录下都生成了sensors.default.so库文件

赶紧把system/lib64/hw/目录下的sensors.default.so替换到终端的system/lib64/hw/目录,重启验证,发现库文件可以正常运行。


小结一下:

1. 初次在64bit系统上开发,相对在32bit上,会发现出现很多意想不到问题,以前很多直接移植的东西可能在64bit上就不能使用。

针对这类问题,解决问题的核心思想一定要放在分析64bit 和32bit的差异性,包括编译、数据处理方式、数据类型等方面。

2.针对64bit系统平台的一些运行机制,还存在很多疑问,这个还得在实践中慢慢去摸索了。



旧安卓手机装本地AI:AutoGLM离线运行Phi-3-mini实战指南 大语言模型(LLM)通常依赖云端算力和高配硬件,但端侧AI正推动轻量化推理成为可能。其核心原理在于模型压缩(如4-bit量化)、CPU优化推理引擎与安卓系统深度适配的协同设计。这类技术显著降低AI使用门槛,带来隐私保护、离线可用、零流量消耗等关键价值。典型应用场景包括老旧设备智能升级、边缘数据处理、教育/养老等弱网环境下的AI助手部署。AutoGLM正是面向ARMv7/ARM64架构、2GB内存起步的Android 6.0+设备打造的离线LLM框架,支持Phi-3-mini等模型在旧机上稳定运行,让‘刷机级 阅读详情

相关推荐

基于bit7z的游戏资源加密压缩与动态加载实战方案

在游戏开发中,资源管理与安全分发是保障项目成功的关键环节。其核心原理在于通过高效的压缩算法和强加密技术,对游戏资产进行打包保护,以防止资源被轻易提取和盗用。这项技术的核心价值在于,它不仅能显著减小游戏安装包与更新包的大小,优化玩家下载体验,还能实现资源的动态按需加载,有效节省运行时内存与加载时间。结合AES-256等加密算法,它为游戏资源提供了企业级的安全防护。其典型应用场景广泛覆盖了需要热更新、DLC分发或对资源防盗有高要求的独立游戏与商业项目。本文聚焦的实战方案,便是利用bit7z这一高效C++库,为U

无花的专栏 464

VR库架构问题:java.lang.UnsatisfiedLinkError dlopen failed is 64-bit instead of 32-bit 解决办法

一个32位的VR游戏App去加载新版的系统服务,系统服务里的.so有32位的,64位的,因为设备是64位的,所以总是默认去加载base.apk!/lib/arm64-v8a/ System.err提示:java.lang.UnsatisfiedLinkError dlopen failed is 64-bit instead of 32-bit dlopen失败:是64位的库,而不是32位的。 暂时解决办法:为了调试顺利进行,先将64位文件夹arm64-v8a删除掉,之后系统默认加载32位文件夹ar.

AppNinja 开发手记 5370

安卓SO逆向实战:Unidbg补环境与魔改MD5算法解析

在移动安全与风控对抗领域,逆向分析常面临脱离真实环境执行代码的挑战,尤其是处理经过自定义修改的加密算法。理解算法原理是基础,从常见的哈希函数如MD5切入,其标准流程包括填充、分组、多轮非线性运算等。当算法被“魔改”——例如修改初始常量、调整移位规则后,静态分析便难以奏效。此时,动态模拟执行技术展现出其技术价值,它允许在受控的沙箱环境中运行和调试代码。Unidbg作为一款基于Unicorn引擎的模拟器,正是实现这一目标的核心工具,它通过“补环境”来模拟系统调用和JNI接口,解决了SO文件对安卓运行时的依赖。这

chutisun0039的博客 332

andorid: is 64-bit instead of 32-bit

is 64-bit instead of 32-bit

MilesMatheson的博客 681

Cocos Creator v2.0安卓真机部署实战指南

Cocos Creator 是一款面向2D游戏开发的跨平台引擎,其v2.0版本因轻量、稳定和成熟安卓构建链路,仍被大量中小团队用于维护与交付。理解v2.0在Android平台的底层构建原理——包括Gradle配置约束、AndroidManifest.xml关键字段、AssetManager资源生命周期、AudioTrack音频缓冲调控及SurfaceFlinger帧级调试——是突破‘编辑器能跑、真机崩溃’交付断层的核心能力。本文聚焦v2.0.10稳定子版本,系统拆解从JS逻辑到APK安装包的全链路技术细节,

weixin_34268310的博客 356

inferCNV包安装问题及解决办法

InferCNV是一个由broad研究所开发的,利用单细胞转录组数据分析肿瘤细胞拷贝数变异(CNV)的工具。基本思路是在整个基因组范围内,通过计算肿瘤细胞关于参考的“正常”细胞的相对表达,利用滑窗思想对邻近的基因相对表达,计算拷贝数。 先贴一个官方安装说明: 官方infercnv安装说明 安装infercnv包: if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager:

m0_51042606的博客 6803

UnsatisfiedLinkError X.so is 64-bit instead of 32-bit之Android 64 bit SO加载机制

UnsatisfiedLinkError X.so is 64-bit instead of 32-bit的产生原因及64 bit SO是如何在Android上运行的。

凯尼 1万+

AGM Supra软件从零到一:国产CPLD工程创建全流程实战解析

本文详细解析了AGM Supra软件在国产CPLD开发中的全流程实战操作,从工程创建到代码开发、编译调试,再到高级技巧与疑难排解。特别对比了Supra与Quartus的差异,提供了工程路径管理、Quartus项目转换、HDL代码规范等实用技巧,帮助开发者高效完成CPLD项目开发。

weixin_29193259的博客 502

Android import_includes export_includes

Android import_includes export_includes         完整的错误:xxx/obj/SHARED_LIBRARIES/yyy_intermediates/import_includes需要的目标xxx/obj/STATIC_LIBRARIES/zzz_intermediates/export_includes      

Android/Linux的专栏 2万+

光流法实战:如何用OpenCV的Farneback算法实现图像对齐(附调参技巧)

本文详细介绍了如何使用OpenCV的Farneback稠密光流算法实现图像对齐,包括核心原理、参数调优和工程实现。通过实战代码和参数优化策略,帮助开发者解决动态场景中的图像对齐问题,提升多帧融合和视频处理的效果。

weixin_29266007的博客 291

变色龙哈希函数 Chameleon Hash 可变型区块链

哈希函数 Hash: 众所周知,区块链有着极其优秀的安全性就是因为其充分使用了哈希函数。 哈希简单用一句话来讲,就是:将任意长度输入的字串可转换成一个固定长度的字串,通过原始字串可以很容易地算出转换后的字串,通过转换后的字串很难还原出原始字串。 哈希函数特征: 1. 对于任意m作为输入,得到输出的结果,很难找到另一个输入m'  (m'不等于m),使得m'的Hash结果也为同样的输出

新手村 1万+

android studio 运行会报 xxx.so“ is 64-bit instead of 32-bit错误

在android13源码 编译出来的xxx.so 库文件,放在android studio 文件下,运行会报 xxx.so" is 64-bit instead of 32-bit错误。

qq_37839656的博客 635

硬件基础——mos管

文章目录前言一、寄生参数二、使用步骤1.引入库2.读入数据总结 前言 MOS管设计重点 一、寄生参数 1.寄生电容 mos管有寄生电容Cgs,此电容大小一般为pF级别,一般规格书可以查到。 使用时,要特别注意GS管教的寄生电容Cgs,控制MOS管的导通与截止,本质上是控制Cgs电容的充放电。(最好要加限流) 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt imp

Malqaq的博客 6597

【转】android 5.0 64bit系统加载库文件失败问题浅析

原文网址:http://blog.csdn.net/andrewblog/article/details/43601303 最近公司的一个项目使用android 5.0 64 bit平台,相对以前版本,除了android 5.0 有很大变动之外,64 bit系统和32 bit系统也存在很多差异性。 目前碰到的问题就是以前在32位上的so库文件,到64 位系统上不能加载的问题。首先来看一下相关l...

weixin_30810583的博客 90

【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程 第一节 lua框架的建立

魔兽世界插件实战笔记从入门到放弃的心理历程 第二节 lua框架的建立 找到魔兽世界的安装目录,找到插件的默认位置:\World of Warcraft\_retail_\Interface\AddOns,在这里建立一个文件夹,魔兽的插件都是用一个文件夹来区分的,第一课吗,就用Lesson_one吧。 下面建立的三个文件,第一个点toc文件是最重要的一个,它是魔兽客户端识别插件的一个标识符。 魔兽版本号有一个函数可以查询在WoWLua下面运行:print("当前游戏版本号:",(select(4,GetBui

qq_33075391的博客 6450

FreeSWITCH安装指南:三种部署方式解析与实践对比

Freeswitch部署方案比较:Yum安装简单快捷但灵活性差;源码安装可定制性强,适合深度开发和性能优化;Docker部署环境一致性好但网络配置复杂。生产环境推荐源码安装以获得最佳性能和定制能力,而Docker适合快速部署和扩展。不同方案各有利弊,需根据具体需求选择。

c_zyer的博客 2141

ARM64 Android SO逆向实战:从环境搭建到算法破解

逆向工程是分析软件内部逻辑、理解程序行为的关键技术,尤其在移动安全与物联网设备分析领域至关重要。其核心原理是在没有源代码的情况下,通过反汇编和调试等手段,将机器指令还原为可理解的逻辑。这项技术的价值在于漏洞挖掘、恶意软件分析、协议还原与知识产权研究。在Android平台,对ARM架构原生库(SO文件)的逆向分析是常见应用场景,涉及JNI交互、反调试对抗与算法识别。本文以一道典型CTF赛题为切入点,详解ARM64汇编核心概念、Android SO专项挑战及动态调试技巧,帮助读者掌握从零开始的完整分析链路,提升

weixin_33726318的博客 382

RTL优化与PPA分析:数字电路设计的关键技术

在数字集成电路设计中,RTL(寄存器传输级)优化是提升芯片性能、降低功耗和减小面积的核心技术。通过PPA(Power-Performance-Area)指标的平衡,工程师可以在不同时序约束下实现设计的最优化。本文基于Synopsys Design Compiler和开源工具Yosys的实验数据,展示了RTL优化在算术单元和控制逻辑中的显著效果,特别是在乘法器和除法器等复杂运算模块中。文章还探讨了AI辅助工具在RTL优化中的应用潜力,为数字电路设计提供了实用的技术参考和工程实践建议。

weixin_42186387的博客 619

dlopen failed: “/system/app/googlewebview85/lib/arm/libwebviewchromium.so“ is 32-bit instead of 64

前言 最近用腾讯的tbs x5内核加载链接时 webview崩溃了 无限崩溃的那种 崩溃的错误也是一脸懵逼 /system/app/googlewebview85/lib/arm/libwebviewchromium.so" is 32-bit instead of 64-bit BUG描述 Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: "/system/app/googlewebview85/lib/arm/libwebviewchro

吕氏春秋i 2027

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Magisk模块开发终极指南:5分钟快速上手自定义Android系统

Magisk作为Android系统定制的"魔法面具",为开发者提供了强大的模块化扩展能力。无论你是想替换系统字体、添加命令行工具,还是实现应用功能增强,Magisk模块都能让你在不修改系统分区的情况下轻松实现。本文将带你从零开始,掌握Magisk模块开发的完整流程,让你在5分钟内创建第一个功能模块! ## 为什么选择Magisk模块开发? 传统的Android系统修改通常需要刷入定制ROM或修

gitblog_00977的博客 463

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android ABI适配与性能优化实战指南

本文深入解析Android ABI适配与性能优化的关键策略,涵盖armeabi-v7a、arm64-v8a等主流架构的适配方案。通过智能分包、64位优化和混合架构加载等实战技巧,显著提升应用性能与兼容性,解决so文件缺失等常见问题,助力开发者高效完成应用打包与优化。

weixin_28712661的博客 358

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux 动态库加载失败排查:ldd 命令 3 步定位与 4 种修复方案实测

本文详细解析了Linux动态库加载失败的常见问题,通过ldd命令三步定位错误,并提供了四种有效的修复方案,包括LD_LIBRARY_PATH环境变量法、ldconfig系统缓存法、编译时rpath硬编码和标准目录部署法,帮助开发者快速解决cannot open shared object file等动态库加载问题。

chuoshao2508的博客 334

Gemma 4端侧AI实战:Apache 2.0许可下的多模态离线推理

端侧AI是指将大模型推理能力直接部署在终端设备(如手机、平板)上,无需依赖云端服务。其核心原理在于模型轻量化、硬件协同优化与本地化执行机制,技术价值体现在隐私保障、低延迟响应和离线可用性三大维度。典型应用场景包括跨境多语言助手、工业现场图像识别、医疗文书本地解析等对数据主权与实时性要求严苛的领域。随着Gemma 4发布,Apache 2.0许可证彻底消除商用法律不确定性,结合E4B型号的多模态离线推理能力,开发者首次获得开箱即用、可嵌入、可交付的标准AI模块——这标志着端侧AI从实验走向量产的关键拐点。

weixin_30333885的博客 429

QNX 7.0.0开发总结

QNX 7.0.0开发总结

汽车以太网和SOA 2万+

Gemini 3.5 Flash与Android智能体中枢技术解析

大语言模型(LLM)在端侧的高效部署,依赖于模型压缩、动态计算图优化与设备端缓存管理等核心技术;其原理在于通过权重精度动态降级、运行时计算图剪枝和KV缓存分片,在保障语义完整性前提下显著降低算力与内存开销;该技术路径不仅提升推理速度与能效比,更推动操作系统从通用平台向AI能力调度中枢演进;典型应用场景包括系统级智能助手、跨App意图路由、结构化Agent服务调用等;本文聚焦Gemini 3.5 Flash模型压缩机制与Android 15智能体中枢架构的深度协同,解析其在Android Studio开发链路

weixin_33768481的博客 531
上一篇: android input子系统之-常用命令及技巧
下一篇: android 5.0 apk 安装失败提示INSTALL_FAILED_INVALID_URI
杨毅
博客等级 码龄14年 26粉丝 27原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值