将 Rust hidapi-rs 库交叉编译到 Android 时,libusb 将无法正确链接

问题描述 投票:0回答:0

我正在为 android 编写一个与 HID 设备接口的应用程序。后端使用 hidapi-rs 用 Rust 编写,并使用 Jetpack Compose 作为 UI。我使用 rust-android-gradle 将我的 rust 库编译成一个共享库,如果我注释掉所有与 HID 相关的东西,我可以成功加载库并在应用程序中调用它,但是只要我包含 HID -相关的东西,一旦使用

System.loadLibrary("MyLibrary")
加载库,我的应用程序就会崩溃。它返回运行时错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.me.myapp, PID: 24129
    java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "libusb_init" referenced by "libMyLibrary.so"...
        at java.lang.Runtime.loadLibrary0(Runtime.java:1077)
        at java.lang.Runtime.loadLibrary0(Runtime.java:998)
        at java.lang.System.loadLibrary(System.java:1661)
        at com.me.myapp.MainActivity.onCreate(MainActivity.kt:34)

我很茫然,四天来一直在想办法解决这个问题。

我尝试了几种不同的方法: 1. 我尝试根据

他们的说明
为Android编译libusb并手动将
.so
文件移动到我项目中的
libs
文件夹。然后我尝试用

加载两个库
System.loadLibrary("usb1.0")
System.loadLibrary("MyLibrary")

libusb1.0.so
加载成功,但再次加载
libMyLibrary.so
时应用程序崩溃。

2. 我尝试使用不同的 Rust HID 库 hidapi-rusb,它是基于 rusb 而不是 libusb 的替代品。这也没有解决问题。

3. 最后,我回到

hidapi-rs
并尝试在本地构建它以与我的 Rust 库一起使用。这也没有解决问题。

我还确保根据

this
通过添加向我的AndroidManifest.xml

文件添加正确的权限
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="12" />

我想在构建时尝试将 libusb 库链接到我的 Rust 库,但我不知道如何做,而且没有太多资源可以这样做。

这个应用已经在MacOS上使用

hidapi-rs
发布成功,但是Android不想配合。非常感谢任何帮助。

android rust hid libusb hidapi
© www.soinside.com 2019 - 2024. All rights reserved.