【问题标题】:Android app logcat error I cant figure out what this meansAndroid应用程序logcat错误我无法弄清楚这意味着什么
【发布时间】:2014-10-14 11:20:37
【问题描述】:

我使用 kivy 为 android 构建了应用程序,并使用 buildozer 创建了 apk 文件。当我在移动设备上运行应用程序时,我会弹出消息“不幸的是 appname 已停止”。

这是logcat错误,有什么建议吗?

E/AndroidRuntime( 5738): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_relocate(linker.cpp:987): cannot locate symbol "wait4" referenced by "libpython2.7.so"...

E/AndroidRuntime( 5738):        at java.lang.Runtime.loadLibrary(Runtime.java:372)

E/AndroidRuntime( 5738):        at java.lang.System.loadLibrary(System.java:514)

E/AndroidRuntime( 5738):        at org.renpy.android.PythonActivity.run(PythonActivity.java:254)

E/AndroidRuntime( 5738):        at java.lang.Thread.run(Thread.java:838)

【问题讨论】:

  • 您是否在应用程序中使用本机代码?问题是无法在 java 中包含本机文件,这就是它给出错误的原因。
  • 在构建您的应用程序时可能出了点问题,虽然我不知道是什么。你能重建apk(先删除你的.buildozer或重建你的python-for-android dist)并发布完整的日志吗?

标签: android kivy


【解决方案1】:

以防万一有人偶然发现这一点。我遇到了同样的问题,但是使用平台工具以及 NDK r10 和 r10b 从头开始​​构建 python。

这是因为 google 删除了 NDK 平台 android-19 中的内联 wait4() 声明。最初的问题是 wait4() 暴露在头文件中但没有在任何地方声明,所以如果你尝试在旧的 NDK 上使用 wait4,你可能会崩溃(就像你现在做的那样)。

所以我相信他们在 API 18 中将其添加到 libc.so 中,但 libc.so 是随操作系统一起提供的,因此操作系统早于 18 的设备不会有 wait4,因此他们对其进行了修补通过在 NDK 平台中通过 android-18 添加内联 wait4() 方法,然后在 android-19 中取出它特别是因为它被认为是过时的功能。有人告诉我,如果我希望应用程序在 API 18 之前的设备上运行,我不应该针对 android-19 构建,但其他人说始终使用最新的 NDK 来匹配您的构建目标。这是问题的链接。

https://code.google.com/p/android/issues/detail?id=19854

就我而言,我进入了 cpython Modules/posixmodule.c 文件,并添加了:

#if defined(__ANDROID__)
#undef HAVE_WAIT4
#endif

在我的情况下这很好,因为我的 python 模块都没有使用 wait4。事实上,Linux 认为 wait4 命令已过时 (http://linux.die.net/man/2/wait4)。您应该改用 waitpid。

因此,即使您下载了某些使用 wait4 的第 3 方 python 模块,您也有 2 个选项。 1) 将该模块更改为使用 waitpid,或 2) 更新“ifdef HAVE_WAIT4”部分中的 Modules/posixmodule.c 文件,并将 wait4 调用替换为 waitpid。缺点是你丢失了返回的资源使用信息,waitpid 没有提供,所以如果你的模块需要,你必须添加一些东西来单独检索该 pid 的资源使用情况。

或者,如果您从不打算使用它,您可以从配置脚本中删除“wait4”,并且您添加的任何需要它的模块都会中断,此时处理该问题的新工程师将不得不重新发现所有再来一遍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多