哪些安卓设备支持jni?

7
我开发了一款Android应用程序,它使用JNI(Java Native Interface)在Archos 43上运行没有问题,并且可以顺畅地运行该应用程序。后来我尝试在Samsung I9100G Galaxy S II和Samsung I9100 Galaxy S II上运行相同的应用程序。我能够在I9100G上运行该应用程序,但无法在I9100上运行。
原因是I9100不支持应用程序的JNI部分。我试图了解其原因,并发现I9100G使用Ti OMAP 4430芯片组和PowerVR SGX540作为GPU,而I9100使用Exynos 4210芯片组和Mali-400MP作为GPU。我怀疑原因可能是芯片组的更改(因为Archos 43也使用Ti OMAP)。但是,我的搜索没有得到进一步的结果。
更新:该应用程序使用蓝牙。当我尝试在I9100上运行应用程序并连接到自定义硬件(CH)时,无法从CH获取任何响应。蓝牙通信部分使用jni编写。
因此,我的问题是是否由于芯片组的原因,我不能在I9100上使用JNI运行我的应用程序?如果是这样,为什么?
另外一个更一般的问题是,哪些设备支持Android JNI应用程序,以及运行Android JNI应用程序所需的基本功能是什么?(我花费了相当多的时间来寻找所有这些问题的答案,任何帮助都将不胜感激。)谢谢。

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

3
所有的Android设备都支持JNI,这是操作系统的一部分实现:Java服务和框架通过JNI使用本地库。然而,不同的架构需要构建相应的本地模块以支持每种架构。即使您仅针对ARM设备,也有ARMv5和ARMv7等不同的架构。ARMv5可以在所有设备上运行,但速度较慢。
Galaxy SII设备可能使用相同的架构,因此您遇到了其他问题/错误。您收到了哪些错误?如果有,请发布logcat。也许您正在尝试访问某个设备上不可用的硬件?或者链接缺失某些系统库?

该应用程序使用蓝牙技术。尝试在I9100上运行该应用程序并连接到自定义硬件(CH)时,无法从CH获取任何响应。蓝牙通信部分使用jni编写。 - user1721904
那么你应该先专注于调试那部分。可能是驱动程序或Android问题(如果设备运行不同版本)。 - Nikolay Elenkov
两个设备都运行着 Android 2.3.3 版本,该应用程序不支持低于 ARMv7 的设备。 - user1721904
好的,所以你需要找到根本问题。很可能不是JNI本身的问题。 - Nikolay Elenkov
应用程序部分不包含 JNI 可在任何 Android 版本大于 2.3 的设备上运行。只有使用 JNI 编写的通信部分才只能在特定设备上运行。 - user1721904
1
就像我之前所说的,你需要找出原因所在。问题不是JNI/本地代码,而是它所做的事情(或者没有做的事情)。检查它崩溃的方式,检查是否所有必要的库都已经就位,获取转储文件等等。 - Nikolay Elenkov

1

现在你透露了问题可能与2.3.3上的BT有关,一切都说得通了。 Android 4.0之前的蓝牙接口没有标准化,很可能你的代码是TI OMAP特定的。因此,如果你想支持其他芯片组,你需要与其他驱动程序或目标设备进行通信,并使用ICS及更高版本。


请问您能详细说明可能的补救措施吗? - user1721904
我会下载I9100的青柠源代码,并找到它们与蓝牙通信的方式。 - Alex Cohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接