如何在 Android 上对 Java 中的串行端口进行单元测试
How to unit test serial ports in Java on Android
我知道 Android 不提供对串行端口的开箱即用访问,除非设备已获得 root 权限或自定义 Android 版本被刷新,比如在BeagleBone 黑板——这正是我的情况。
使用 Android SerialPort API project 我可以通过示例 GUI 应用程序(稍作修改)访问和测试我的设备的串行端口。
但是,我还想为 Serial API 添加 JUnit 测试,因为我会将其扩展为一个库模块供客户端程序员使用。我尝试使用 AndroidTestCase,但收到错误消息:
java.lang.UnsatisfiedLinkError: Native method not found:
com.XXX.android.serialport_api.SerialPort.open:
(Ljava/lang/String;II)Ljava/io/FileDescriptor;
at com.XXX.android.serialport_api.SerialPort.open(Native
Method)
at com.XXX.android.serialport_api.SerialPort.<init
(SerialPort.java:32)
在我看来 serialport.so 文件不在 loaded/visible 由 AndroidTestCase 提供的模拟环境中。
我正在使用 Android Studio 中的 "New Module" 向导创建的标准测试结构。
任何建议或提示都将不胜感激,因为我对该主题的搜索没有任何结果。如果需要,我很乐意提供测试 class 和实现(尽管实现与上面引用的开源示例中的 SerialPort.java class 几乎相同)。
我发现了问题。包名称硬编码在预编译的 .so 文件中。因此,不必使用像 com.XXX.XXX 这样的自定义包名称,而是必须将 SerialPort(和其他实现 类)直接放在 /java 文件夹下的顶级包中。包名称应该完全是 android_serialport_api——就像库示例中的一样。
我知道 Android 不提供对串行端口的开箱即用访问,除非设备已获得 root 权限或自定义 Android 版本被刷新,比如在BeagleBone 黑板——这正是我的情况。 使用 Android SerialPort API project 我可以通过示例 GUI 应用程序(稍作修改)访问和测试我的设备的串行端口。
但是,我还想为 Serial API 添加 JUnit 测试,因为我会将其扩展为一个库模块供客户端程序员使用。我尝试使用 AndroidTestCase,但收到错误消息:
java.lang.UnsatisfiedLinkError: Native method not found:
com.XXX.android.serialport_api.SerialPort.open:
(Ljava/lang/String;II)Ljava/io/FileDescriptor;
at com.XXX.android.serialport_api.SerialPort.open(Native
Method)
at com.XXX.android.serialport_api.SerialPort.<init
(SerialPort.java:32)
在我看来 serialport.so 文件不在 loaded/visible 由 AndroidTestCase 提供的模拟环境中。 我正在使用 Android Studio 中的 "New Module" 向导创建的标准测试结构。
任何建议或提示都将不胜感激,因为我对该主题的搜索没有任何结果。如果需要,我很乐意提供测试 class 和实现(尽管实现与上面引用的开源示例中的 SerialPort.java class 几乎相同)。
我发现了问题。包名称硬编码在预编译的 .so 文件中。因此,不必使用像 com.XXX.XXX 这样的自定义包名称,而是必须将 SerialPort(和其他实现 类)直接放在 /java 文件夹下的顶级包中。包名称应该完全是 android_serialport_api——就像库示例中的一样。