【问题标题】:How to disable Binary Translator on the Android Emulator X86?如何在 Android Emulator X86 上禁用二进制转换器?
【发布时间】:2024-01-24 06:01:01
【问题描述】:

我仍然收到 logcat 需要库 libhoudini 的警告,而且我已将所有库编译到 arch x86 中。

在不支持二进制转换器的模拟器上 - 日志:

04-14 18:05:05.304: D/FFMpeg(992): ### Try to load lib: jniaudio
04-14 18:05:05.304: D/dalvikvm(992): Trying to load lib /data/data/com.app.test/lib/libjniaudio.so 0xa6a0d230
04-14 18:05:05.304: D/FFMpeg(992): Couldn't load lib: jniaudio - Cannot load library: load_library[1093]: Library '/system/lib/libhoudini.so' not found

在已安装支持二进制转换器的模拟器上 - 日志:

04-14 18:05:05.304: D/FFMpeg(992): ### Try to load lib: jniaudio
04-14 19:34:00.764: D/dalvikvm(1171): Trying to load lib /data/data/com.app.test/lib/libjniaudio.so 0xa68cbd98
04-14 19:34:00.804: E/dalvikvm(1171): The lib may be ARM... trying to load it [/data/data/com.app.test/lib/libjniaudio.so] using houdini
04-14 19:34:00.808: D/houdini(1171): [1171] Loading library(version: 2.0.5.42475 RELEASE)... successfully.
04-14 19:34:00.808: E/dalvikvm(1171): dvm_dlopen: unable to open /data/data/com.app.test/lib/libjniaudio.so

应用程序.mk

APP_ABI := x86
APP_PLATFORM := android-14

我无法在我的模拟器上加载本机库,但系统在确定共享库的目标架构时出错。如果有人能解释一下,我将不胜感激。?

更新 1。

/obj/local/x86/libjniaudio.so - 这里是共享库的头信息。

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          68664 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         7
  Size of section headers:           40 (bytes)
  Number of section headers:         32
  Section header string table index: 31

【问题讨论】:

  • 你解决了吗?我也有同样的问题。
  • 是的,请解释一下您的问题。我试图提醒我的问题是什么,我认为库失败是因为平台 android 上驱动程序的音频/视频地址错误。此外,这个库音频在唯一的 android-9 上工作,所以我放弃了,我一直在搬出去使用像 Vitamio 这样的现成库。
  • 感谢您的回答:)
  • 所以没问题,记住大约 3 个不同的版本。在 android 9、10、14 版本上可能有不同的驱动程序(链接到通过驱动程序流式传输视频/音频)。 Android 5.0 可能又会有新的其他驱动了。

标签: android c++ android-ndk shared-libraries dalvik


【解决方案1】:

您是否 100% 确定您的库是 x86 二进制文件?

在这种情况下不应加载二进制翻译器。

您可以使用 readelf、file 或我制作的这个 Android 应用程序检查文件的真实 ABI:https://play.google.com/store/apps/details?id=com.xh.nativelibsmonitor.app(目前仅限 x86)

【讨论】: