【问题标题】:How to debug Project Tango C examples如何调试 Project Tango C 示例
【发布时间】:2015-01-20 08:19:58
【问题描述】:

我使用的是 Ubuntu 14.04,我克隆了 c 示例 github 存储库。我安装了 ADT Eclipse,还安装了 C/C++ 插件。我可以将示例项目导入为 Android 项目。到目前为止,我尝试了 PointCloud 示例和增强现实示例。我可以将调试会话作为 Android 应用程序启动,并且可以选择我的 Tango 平板设备。我可以在 logcat 视图的顶部看到此错误消息:

01-20 00:09:05.583: A/art(5250): art/runtime/thread.cc:1011] No pending exception expected: java.lang.UnsatisfiedLinkError: Couldn't load point_cloud_jni_example from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/libtango_device.jar", zip file "/data/app/com.projecttango.experiments.nativepointcloud-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.projecttango.experiments.nativepointcloud-1, /system/lib, /vendor/lib, /system/lib]]]: findLibrary returned null

同时在平板电脑上,我看到了一个对话框来授予应用程序的权限,我给了,但随后应用程序立即停止。

  1. 我应该使用 Eclipse ADT,还是可以以某种方式使用 Android Studio (IntelliJ)?
  2. 我应该将项目作为 Android 项目导入吗? (我认为是的)。

对我来说,错误消息中看起来很奇怪的是提到了 dalvik。我认为 Tango 应用程序应该是 ART 应用程序,但错误消息提到了 Dalvik(虽然似乎 ART 运行时试图加载它)。那是问题吗?我该如何解决?

【问题讨论】:

  • 我设法运行了 Java PointCloud 示例。有趣的是,有一段时间我看到一条抱怨 API 19 的错误消息。那是清单中的目标 SDK 版本,这真的不是 ART。然后我需要编译 TangoUtils,并将它放在 lib 中。但所有这些都是 Java 示例,我想开始使用 C。
  • 我也安装了 NDK,我想我需要为 JNI 部分做一些构建

标签: android c java-native-interface ubuntu-14.04 google-project-tango


【解决方案1】:

我终于放弃了 Android Studio - 我设法继续前进,直到我不得不引入 tango 共享库,根本找不到说服 gradle 链接它的方法 - 订单上有太多 cmets的

ndk 集成失败了,新的 ndk 在某个模糊的未来点万岁

我在 Windows 上,最后最终选择了 VisualGDB,它允许在 Java 端使用 eclipse 并在本机端使用 Visual Studio - 可能可以使用 Eclipse 来完成,但 Visual Studio 是一个老朋友。由于您使用的是 Ubuntu,因此您应该在 gdb 接口中有替代方案。

【讨论】:

  • 哇?这听起来比我想象的还要糟糕。今晚我会修补的。
  • “ndk 被破坏”是什么意思?它有什么问题?
  • 顺便说一句,有趣的是,AndroidManifest 以 API 19 为目标,该项目包含一个 4.4W 的 android.jar,并且教程在编译时谈到了 API 20 NDK。 o_O
  • @CsabaToth - 修正评论 - 这是 ndk 的 gradles 集成问题 - ndk 本身很好
  • 谢谢 - 我真的很想在 AS 上取得成功,只是当时还没有准备好 - 当然,他们确实警告我们这还没有准备好迎接黄金时段
【解决方案2】:

好的,所以我只需要做一些功课。如此处所述:https://developers.google.com/project-tango/apis/c/c-getting-started

  1. 我将当前目录更改为所需的 C 示例项目(根目录)。然后我不得不说<ndk_path>/ndk-build。这编译了包含JNI 相关部分的so 文件。例如,在point-cloud-jni-example 的情况下,在libs 目录中创建armabi-v7a 目录,并在其中创建/编译/放置libpoint_cloud_jni_example.solibtango_client_api.so 文件。请注意,我已经安装了 NDK。

  2. 我在 ADT Eclipse 中重新打开了项目并刷新了(右键单击根节点上的项目资源管理器并刷新)。之后我仍然收到一条错误消息,它找不到 Android 清单。这是愚蠢的,因为它就在那里。为了触发一些动作,我在 Android 清单中将目标 SDK 版本调整为 20。请注意,如果您将最低 SDK 版本设置为 20,Tango 设备将不会显示在 AVD 中,因为它的 API 级别是 19,只是说':)

无论如何,在那之后我设法将项目作为 Android 应用程序运行。另请注意,c-getting-started 中引用的 github repo 不再存在。我们可以说“hello world”现在是hello-tango-jni-example 项目。

【讨论】:

  • 一句话:我只需要编译JNI部分。
  • 此外,如果您的 apk 中没有 JNI 部分,您也可以轻松发现。在修复之前它是 24K,之后它变成了 319K。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多