我正在为 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不想配合。非常感谢任何帮助。