【问题标题】:Which Android devices support jni?哪些 Android 设备支持 jni?
【发布时间】:2012-10-05 04:44:39
【问题描述】:

我为 Archos 43 开发了一个使用 JNI(java 本机接口)的 Android 应用程序。

没有问题,我能够顺利运行应用程序。 后来我尝试在 Samsung I9100G Galaxy S IISamsung I9100 Galaxy S II 上运行相同的应用程序。

我能够在 I9100G 上运行该应用程序,但不能在 I9100 上运行。

原因是应用程序的 JNI 部分在 I9100 上不受支持。

我确实试图了解这个原因,并且能够发现I9100G使用Ti OMAP 4430 chipsetPowerVR SGX540 as GPU whereas I9100 uses Exynos 4210 chipset and Mali-400MP as GPU.

我怀疑原因可能是芯片组的变化(因为 Archos 43 也使用了 Ti OMAP)。但是通过我的搜索无法获得任何进一步的结果。

更新 该应用程序使用蓝牙。在尝试连接到自定义硬件 (CH) 时,在 I9100 上运行应用程序时无法从 CH 获得任何响应。蓝牙通信部分使用jni编写。

所以我的问题是,由于芯片组的原因,我是否无法在 I9100 上使用 JNI 运行我的应用程序,如果是,为什么?

还有一个更普遍的问题是哪些设备支持 Android JNI 应用程序以及设备运行 Android JNI 应用程序所需的基本功能是什么? (我花了相当多的时间试图找到所有这些问题的答案,我们将不胜感激。)

谢谢。

【问题讨论】:

  • 我一直在开发一个使用 JNI 的应用程序,并且一直在使用三星 Galaxy S-2 GT-I9100(Android 4.0.3)进行测试,没有任何问题。
  • jni在应用中的作用是什么?
  • 抓取和索引一些数据
  • 我猜这可能取决于处理器架构而不是 Jni 支持。例如 arm vs arm-v7 或 neon 或其他扩展...

标签: android bluetooth android-ndk java-native-interface equinox


【解决方案1】:

所有 Android 设备都“支持”JNI,这就是操作系统的很大一部分是如何实现的:Java 服务和框架通过 JNI 使用本机库。然而,有不同的架构,如果你有一个本地模块,你需要确保为你想要支持的每个架构构建一个。即使您只针对 ARM 设备,也有 ARMv5 和 ARMv7 设备。 ARMv5 应该适用于所有版本,但速度较慢。

Galaxy SII 设备可能使用相同的架构,因此您遇到了其他一些问题/错误。你得到了什么错误?如果可用,请发布 logcat。也许您正在尝试访问其中一台设备上不可用的硬件?或者链接到由于某种原因丢失的系统库?

【讨论】:

  • 应用程序使用蓝牙。在尝试连接到自定义硬件 (CH) 时,在 I9100 上运行应用程序时无法从 CH 获得任何响应。蓝牙通信部分使用jni编写。
  • 那么你应该首先专注于调试那部分。可能是驱动程序或 Android 问题(如果设备运行不同的版本)。
  • 这两款设备都运行 android 版本 2.3.3,并且应用程序无法在支持低于 ARMv7 的设备上运行。
  • 好的,所以你需要找到根本问题。它很可能不是 JNI 本身。
  • 正如我所说,您需要找出原因。这不是因为它是 JNI/本机代码,而是因为它做了(或不做)某些事情。检查它是如何崩溃的,检查是否所有需要的库都到位,转储等等。
【解决方案2】:

既然您透露该问题可能与 2.3.3 上的 BT 有关,这一切都说得通。 4.0 之前的 Android 蓝牙接口未标准化,您的代码很可能是 TI OMAP 特定的。因此,如果您想支持其他芯片组,则需要与其他驱动程序通信,或者与 ICS 或更高版本的目标设备通信。

【讨论】:

  • 能否详细说明可能的补救措施?
  • 我会下载I9100的氰源,并找到它们与蓝牙通信的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多