如何在64位Android-L平台上使用32位本机库

2024-03-14

我有一个 Android 应用程序,我用 AOSP(Kitkat) 编译为 Android 系统应用程序,并且运行良好。我的应用程序依赖于使用 Android-NDK 作为 32 位库编译的本机代码。我正在我的 Android 应用程序中复制本机库库/armeabi文件夹,然后在 AOSP 中构建我的 Android 应用程序(我还修改了设备.mk将我的库复制到/系统/库文件夹)。 Android Kitkat 上一切正常。

当我将我的应用程序移植到 Android-L(64 位平台)上时,我无法从 Android 应用程序加载我的本机库,错误如下 -

java.lang.UnsatisfiedLinkError: dlopen failed: "libfoobar.so" is 32-bit instead of 64-bit

我正在使用以下 java 代码来加载本机库-

        if ( ENABLE_ANDROID_INTEGRATION )
        {
            System.load("/system/lib/libfoobar.so");
        }
        else
        {
            System.loadLibrary("foobar");
        }

当我使用 AOSP 构建代码时启用安卓集成 is true

更有趣的是当我关闭时启用安卓集成并在 Eclipse 中构建我的应用程序,在 AOSP 之外作为普通的“可下载”应用程序,然后我的应用程序在 64 位 Android 平台上运行良好。

我想知道的是 - 如何将我的应用程序构建为具有 32 位库(这意味着 AOSP 构建)的本机 Android 系统应用程序,适用于 64 位 Android 平台?

我尝试过的 - 我用过LOCAL_32_BIT_ONLY = true在我的 android 应用程序的 Android.mk 文件中标记,但它似乎没有用。可能我不完全了解这个标志的使用。

由于我的时间不多了,所以我更愿意在小组中而不是 RnD 中发布这个问题。如果有人遇到这个问题,请指导。

问候, 梅拉杰


它在作为第三方应用程序安装时工作的原因是,在安装时,包管理器会扫描 APK 并检查它是否使用本机库,如果找到,它会存储它们使用的 ABI(因为它只安装库)对于单个 ABI,因此有关做出哪个选择的信息需要存储在某处)。

对于使用 /system/lib 中的库在系统范围内安装的应用程序,尚不清楚此特定应用程序是否依赖于 /system/lib 中的某些应用程序特定的库(这些库在 /system/ 中的 64 位版本中不可用) lib64),因此包/应用程序管理器无法知道这个特定的应用程序需要特定的 ABI,因此以 64 位模式运行它。

设置 LOCAL_32_BIT_ONLY 可能只影响它是否应该以 32 位模式编译,而不影响它应该以哪种方式运行。

一份旧的(可能已经过时的)报告位于http://www.slideshare.net/hidnorly/investigation-result-on-64-bit-support-in-aosp http://www.slideshare.net/hidenorly/investigation-result-on-64-bit-support-in-aosp似乎建议应用程序的本机库应该进入 /system/lib/apkname,但在实际的 Android 5.0 系统上似乎并非如此。相反,库似乎位于 /system/app/ 中appname/lib/abiname。一些应用程序似乎具有适用于多种架构的本机库(例如“arm”和“arm64”)abiname),而其他的只有一种架构(这将强制进程在该 ABI 模式下启动)。

所以我认为你需要改变如何安装本机库的机制(你说你手动修改了 device.mk) - 我不熟悉如何构建自己的应用程序作为 AOSP 构建的一部分,但我建议尝试查看现有的捆绑应用程序如何执行此操作,此提交可能相关:https://android.googlesource.com/platform/packages/apps/Terminal/+/1a161f75%5E%21/ https://android.googlesource.com/platform/packages/apps/Terminal/+/1a161f75%5E%21/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在64位Android-L平台上使用32位本机库 的相关文章

  • Android Studio 14 原生开发 + CrystaX NDK

    我正在尝试将一个巨大的跨平台 C 11 iOS Android 应用程序项目迁移到 Android Studio 14 我使用 CrystaX NDK 进行 boost 和 C 14 他们网站的博客上有官方 Android Studio C
  • Android NDK 链接问题

    我用 NDK 编译了 Sox 等 所以 我拥有所有 Android 友好的共享库 我制造了一个简单的测试文件 http pastebin com rniwQ7Gz它调用 sox 函数 NDK 构建告诉我 undefined referenc
  • Python:当键盘中断被转发到多处理子进程时?

    我在 Windows 上执行了以下测试代码 import multiprocessing import time def child while True time sleep 2 if name main multiprocessing
  • 从 GraphicBuffer 读取时出现意外的像素数据布局

    我目前正在本机 Android 框架中的一个平台上工作 在该平台上我使用 GraphicBuffer 来分配内存 然后从中创建 EGLImage 然后将其用作 OpenGL 中的纹理 使用简单的全屏四边形 问题是 当我从 GraphicBu
  • 如何在 VC++ 中使用 _W64 和 __w64?

    有这样的事情 w64 http msdn microsoft com en us library s04b5w00 VS 71 aspx在 Visual C 9 中 我在尝试将本机 C DLL 移植到 64 位时遇到了它 特别是在crtde
  • 将文件夹中结构化的预构建文件集添加到 android out 文件夹

    我为arm编译了glibc 这与Android glibc或bionic C不同 因为我编译的glibc环境将有助于提供更多api 现在我可以在 Android 运行时将 glibc 环境复制到 system 文件夹中 并且在执行 chro
  • build.gradle 文件中的 abiFilters 属性是什么?

    我找到了关于什么的文档ABI https developer android com ndk guides abis html是 但我找不到任何有关 ndk abiFilters 属性的确切用途的文档 具体有几个问题 如果我设置该属性 列出
  • 作业调度 API android L

    我正在制作一个使用 jobscheduler API 的应用程序 我想定期以及在设备充电时运行服务 这是代码 JobInfo Builder builder new JobInfo Builder kJobId mServiceCompon
  • 关闭 MediaStyle 通知

    Lollipop 中的新 Android MediaStyle 通知没有关闭按钮 看起来 Google Code 上已经存在一个错误 在错误解决之前 有谁知道解决此问题的好方法是什么 我们应该推迟切换到 MediaStyle 吗 或者使用其
  • Boost C++ 和 Android 3

    我尝试用谷歌和SO搜索 到目前为止 我只能找到相互矛盾的信息 如果 Boost 和 Android 结合太难 也许有替代品 我对 smart ptr 线程 函数 lexical cast string algo 和容器特别感兴趣 任何意见都
  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • 是否可以更改 Android L TimePickerDialog 的样式?

    我正在 Android L 模拟器上测试我的应用程序 我注意到 TimePickerDialog 已显着更改为 这与我的应用程序的主题不符 我想知道在 Android L 上运行时是否可以获得旧的 TimePickerDialog 样式 A
  • 无法加载(查找)j2v8_android_x86 库

    我有一个使用的 gradle 项目j2v8 android 2 2 1 http mvnrepository com artifact com eclipsesource j2v8 j2v8 android 2 2 1库 为 V8 JS 引
  • 如何像 git-archive 一样归档 AOSP 存储库?

    我使用这个命令来归档 git 源代码 git archive format tgz o myproj 20180402 tgz prefix myproj master 是否有相同 相似的方法来归档 AOSP 存储库分支或标签 怎么做 任何
  • 调试 Android 库中的本机代码

    我的工作空间布局是 ApplicationLibrary AndroidManifest xml jni libs src Application AndroidManifest xml ant properties 如何在 Eclipse
  • 如何在命令行中使用 Visual Studio 编译 x64 代码?

    我想使用 Windows 命令行编译一个简单的 hello world 风格的程序 cl file name c 很容易 现在我想在 64 位中做同样的事情 我应该怎么办 您需要使用发出 x64 代码的 cl exe 编译器版本 哪一个有点
  • 如何使用android ndk r9b为Android编译FFMPEG

    我想设计一个Android应用程序 可以通过FFMPEG命令播放和编辑视频 但我不知道如何在Android上使用FFMPEG 我尝试过从Google搜索到的许多方法 但它们太旧了 无法实现 现在 FFMPEG的最新版本是2 1 1 Andr
  • Android Lollipop 上的海拔 + 透明度错误

    在 API 21 上为具有一些 alpha 例如 99fe0038 和一些高程的视图使用背景颜色会显示两个圆圈 一个用于视图本身 另一个用于内部 标高和背景颜色通过代码设置 view setElevation getResources ge
  • Qt Creator:如何区分 win32 和 win64

    我必须在 pro 文件中执行类似的操作 win32 LIBS L 3rdparty libusb win32 lib msvc llibusb else win64 LIBS L 3rdparty libusb win32 lib msvc
  • 使用 Android NDK 将文件写入 SD 卡以外的位置?

    除了SD卡之外 还有其他方法可以将文件写入其他位置吗 我在文件系统上尝试了许多不同的路径 但 fopen 总是返回 NULL 除了我在 sdcard 内写入 读取的任何文件 还有其他相当于

随机推荐

  • Javascript导入包无法解析模块说明符

    我正在尝试导入使用 npm 下载的模块 我的 json 文件是 name nodejs web app1 version 0 0 0 description NodejsWebApp1 main server js author name
  • 致命异常:iOS 上的 NSInternalInconsistencyException 崩溃

    几天来我一直在尝试重新创建和研究这个问题 但我不会去任何地方 这是堆栈跟踪 任何人都可以阐明正在发生的事情吗 我认为这与远程通知有关 不久前 当我安装 firebase sdk 时 问题就开始了 当时事故发生的次数并不多 但现在 事故发生的
  • 带有 pandas 数据框的子图

    我想使用 pandas 数据框 称为 df 在图上创建多个子图 我原来的情节在这里 df plot x month y number title open by month color blue 我在本网站的 使用图形和子图 部分尝试了多次
  • 我如何定义“其余宽度”?

    这是我的代码 function tags input on focusout function var txt this value replace a z0 9 ig allowed characters if txt span span
  • 如何运行 Spark Java 程序

    我为 Spark 编写了一个 Java 程序 但是如何从 Unix 命令行运行和编译它 编译运行时是否必须包含任何 jar 结合官方步骤快速入门指南 https spark apache org docs latest quick star
  • D 中的枚举与不可变

    有什么区别 enum i 2 enum s Hello and immutable i 2 immutable s Hello 在 D 2 0 中 An enum是用户定义的类型 而不是变量 enum e 2 是一个 像这样的东西的简写en
  • 查找但不深入到包含搜索文件的目录

    我有几个由 pom xml 或类似配置的项目 我想使用 linux file 命令来定位这些项目 例如经过find name pom xml 然而 由于路径很深 这需要一些时间 我想用find prune当我已经找到文件时停止在子目录中搜索
  • 在哪里使用 Redux 处理计算属性?

    使用 Redux 时 存储应该是唯一的事实来源 并且没有冗余 假设商店的一部分代表有名字和年龄的人 传统面向对象编程中的 person 类可能如下所示 class Person constructor first last birthday
  • 抽象控件中的 VisualState

    我有一个抽象的 BaseControl 其中包含依赖项属性以及默认样式和 VisualState 我想在继承的控件中使用这些 VisualState 据我所知 设置继承控件的模板不会使 VisualState 访问它需要更新的 UIElem
  • 在 .net 5 控制台应用程序中利用用户机密

    我正在构建一个简单的控制台应用程序来处理大型 CSV 文件 SDK版本5 0 202我使用的是 Manjaro Linux CODE using System using System Text using TinyCsvParser us
  • Android 资源限定符 -sw#dp 与 -w#dp

    假设我正在为屏幕尺寸等于或大于 600dp 的设备开发不同的布局 我想使用 android 3 2 后的资源限定符 我创建了一个名为layout sw600dp并将我的布局放在那里 但同时我可以创建一个名为的文件夹layout w600dp
  • 查明文件是否已更改

    我想查明自上次启动 shell 脚本以来文件是否已被修改 也许可以通过创建布尔值或其他东西 也许可以将上次运行脚本的时间保存在一个文本文件中 下次启动脚本时它应该读取该文件 然后它应该找出哪些文件已更改 以便我可以检查是否有文件已使用以下内
  • Laravel 5.8 中 Pusher 连接失败

    我在 laravel 5 4 中使用 Pusher 没有任何问题 但现在我尝试使用 laravel 5 8 但出现以下错误 我已经尝试了我能想到的一切 甚至改变了encrypted to false万一 我三次检查了我的推送者凭据 Lara
  • uifont“Impact”不适用于 iOS

    我正在尝试使用 Impact ttf 它是 OSX 内置的 但在 xcode 上看不到自定义字体 所以我将它包含在我的项目中 如屏幕所示并使用 UIFont font1 UIFont fontWithName Impact ttf size
  • 在 iOS SDK 4.2 上构建越狱设备

    我有一个通过 Cydia 分发的应用程序 它没什么黑科技 只是一个连接到 Web API 的 GUI 我上次提交更新是在 SDK 4 0 之前 我使用了可用的说明here http thebigboss org hosting reposi
  • Javascript:检索对象属性名称

    我正在尝试编写一个需要知道传入对象的属性名称的函数 如下所示 var data key1 value1 key2 value2 etc i want the string value key1 如何从中检索字符串 key1 data 我知道
  • CSS 表格宽度 - 100% + 减去边距

    我偶然发现了一个我不完全确定如何解决的问题 我有一个包含多个 div 的页面 其中一个包含一个表格 但边距为 20 像素 我需要这个表格 对接 另一个 div 的右侧 这是我通过使用 20px 的边距来完成的 正如我所希望的那样 由于此 d
  • 如何使用 VIM 修复 perl 语法错误“缺少右大括号或方括号”?

    使用不匹配的数组大括号 或范围括号 编译 或执行 perl 程序会导致 缺少右大括号或方括号 语法错误 Perl 经常将源代码报告为最后一个代码行 at EOF 这可能与实际缺失的部分相去甚远 Perl 错误消息示例 Missing rig
  • Robot.mouseMove 在 Mac OS X 中根本不起作用

    我在 IntelliJ IDE 中使用该代码创建了 java 文件 import java awt AWTException import java awt MouseInfo import java awt Robot public cl
  • 如何在64位Android-L平台上使用32位本机库

    我有一个 Android 应用程序 我用 AOSP Kitkat 编译为 Android 系统应用程序 并且运行良好 我的应用程序依赖于使用 Android NDK 作为 32 位库编译的本机代码 我正在我的 Android 应用程序中复制