我仍然收到警告,要求通过logcat建立库libhoudini,而且我已经将所有库编译到arch x86中。
在不支持Binary Translator的仿真器上-日志:
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
在安装了支持的模拟器上Binary Translator-日志:
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
Application.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
最佳答案
您是否100%确定您的库是x86二进制文件?
在这种情况下,不应加载二进制翻译器。
您可以使用readelf,file或我制作的这个Android应用检查文件的真实ABI:https://play.google.com/store/apps/details?id=com.xh.nativelibsmonitor.app(目前仅x86)
关于android - 如何在Android Emulator X86上禁用Binary Translator?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23067246/