【问题标题】:Android NDK native-audio example crashesAndroid NDK 原生音频示例崩溃
【发布时间】:2011-10-16 05:11:01
【问题描述】:

我已经构建了本机音频示例并将其下载到我的 Galaxy Tab 10.1,但它不起作用。看起来它要开始了(即窗口名称出现在顶部),但随后严重崩溃。我希望有人可能知道为什么?可能是 Tab 上的音频支持有问题,还是...?

我还尝试使用“android_native_app_glue”创建自己的非常简单的本机活动,但它也崩溃了——即使我没有调用 OpenSL。事实上,我所要做的就是将 -lOpenSLES 添加到我的 LOCAL_LDLIBS 以导致启动崩溃。当我删除该链接器标志时,没有崩溃。很奇怪,让我觉得选项卡中缺少原生音频支持的东西?

谢谢, 阿尔法

【问题讨论】:

  • “崩溃”这个术语太不精确,以至于任何人都不太可能理解这个问题。从尝试启动程序时发布任何 UI 错误消息和 logcat 日志。
  • 08-01 10:13:55.570: WARN/dalvikvm(6348): threadid=1: 线程以未捕获的异常退出 (group=0x4016d760) 08-01 10:13:55.580: ERROR/AndroidRuntime (6348):致命异常:主 08-01 10:13:55.580:错误/AndroidRuntime(6348):java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.native_activity/android.app.NativeActivity}:java .lang.IllegalArgumentException:无法加载本机库:/data/data/com.example.native_activity/lib/libnative-activity.so
  • 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751) 08-01 10:13:55.580: 错误/ AndroidRuntime(6348): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767) 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在 android.app.ActivityThread.access$1500(ActivityThread.java: 122) 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005) 08-0110:13:55.580:ERROR/AndroidRuntime(6348):在 android.os.Handler.dispatchMessage(Handler.java:99)
  • 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在 android.os.Looper.loop(Looper.java:132) 08-01 10:13:55.580: 错误/ AndroidRuntime(6348): 在 android.app.ActivityThread.main(ActivityThread.java:4028) 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在 java.lang.reflect.Method.invokeNative(Native Method) 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在 java.lang.reflect.Method.invoke(Method.java:491) 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
  • 08-01 10:13:55.580: 错误/AndroidRuntime(6348): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 08-01 10:13: 55.580: ERROR/AndroidRuntime(6348): at dalvik.system.NativeStart.main(Native Method) 08-01 10:13:55.580: ERROR/AndroidRuntime(6348): Caused by: java.lang.IllegalArgumentException: Unable to load native库:/data/data/com.example.native_activity/lib/libnative-activity.so 08-01 10:13:55.580:错误/AndroidRuntime(6348):在 android.app.NativeActivity.onCreate(NativeActivity.java:199 )

标签: android android-ndk native-activity


【解决方案1】:

事实上,我所要做的就是将 -lOpenSLES 添加到我的 LOCAL_LDLIBS 以导致启动崩溃。当我删除该链接器标志时,没有崩溃。很奇怪,让我觉得选项卡中缺少原生音频支持的东西?

您的 logcat 似乎表明 /data/data/com.example.native_activity/lib/libnative-activity.so 的加载失败。如果无法复制问题以验证可能导致的错误消息,这很可能是由于运行时链接器无法找到要加载的引用系统库,或者可能是无法找到 libnative 的令人困惑的报告 - activity.so 本身,或 lib 中未解析的符号,或其他内容。

如果您有另一个设备要测试,那将是一条明显的路径。

还测试从已知使用本机音频的其他人编译的应用程序。

如果这些都不可能,您可能会使用 readelf 或 objdump(尤其是 ndk 安装中某处的 android 版本)甚至字符串或 grep 来查找 libnative-activity.so 所需的系统库的名称,然后查看它们是否确实存在于您的设备上。

【讨论】:

  • 谢谢!我没有可以测试的其他设备,但在与同事交谈后,我认为这是 Android 版本不兼容。 Native Audio 适用于 API 级别 9,而我的 Tab 是 API 级别 12(我认为)。我假设 API 级别的前向兼容性,但事实并非如此。如果正确,此 menas API 2.3 设备应支持本机音频,但 3.1 设备不支持。是吗?
  • @ALF 我怀疑它是否已从 3.1 中删除,尽管它可能会在特定供应商版本中被无意中破坏。为什么不尝试找出确切的问题而不是放弃?
  • 其他人似乎发现 IO 10.1 选项卡中缺少该库,但认为它是 google CTS 套件所必需的:forum.xda-developers.com/archive/index.php/t-1119189.html 所以您所拥有的可能是消费前的示例。该链接还包括建议的解决方法;稍加创意,您就可以从其他地方加载库,而无需 root。
  • 感谢您的跟进,克里斯!我的项目中的其他优先事项让我偏离了方向,所以直到现在还没有收到您的回复。我已经问过我们是否可以将我们的设备更新到最新的消费者版本,希望能解决这个问题。
猜你喜欢
  • 2015-07-30
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多