我在linux本地机器上运行Rust(工具链稳定-x86_64-unknown-linux-gnu(。我的库使用我的Android应用程序构建和运行良好。但如果我指定i686-linux-android目标,我就无法运行任何单元测试。
我可以在空的项目上复制它。
我创建了新的锈蚀项目
cargo new android_test --lib
通过/Android_test/.forge/config设置Android NDKar和链接器
[target.i686-linux-android]
ar = "ndk/x86/bin/i686-linux-android-ar"
linker = "ndk/x86/bin/i686-linux-android-clang"
简单的测试就会成功。
cargo test
但如果我把目标设定为三倍,它就会失败。
cargo test --target i686-linux-android
正在运行target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7错误:无法执行进程
/home/zellius/Projects/android_test/target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7
(从未执行(原因:没有这样的文件或目录(操作系统错误2(
如果我通过adb手动将android_test-a71bf7c418798cd7文件推送到我的android模拟器,单元测试将运行并通过。
我尝试创建自定义跑步者。但结果是一样的。
android_runner.sh
#!/bin/sh
set -e
adb push "$1" "/data/local/tmp/$1"
adb shell "/data/local/tmp/$1"
/android_test/.forge/config
[target.i686-linux-android]
ar = "ndk/x86/bin/i686-linux-android-ar"
linker = "ndk/x86/bin/i686-linux-android-clang"
runner = ["android_runner.sh"]
我是不是错过了什么?我可以使用货物测试在模拟器上运行测试吗?或者我应该只使用一个脚本来实现这个目的?
和往常一样,错误很小,很愚蠢。
在我的情况下,我应该修复runner脚本的路径。
我的项目结构:
-
/.货物
- 配置
-
ndk
-
android_runner.sh
-
其他文件和目录
/android_test/.forge/config
[target.i686-linux-android]
ar = "./ndk/x86/bin/i686-linux-android-ar"
linker = "./ndk/x86/bin/i686-linux-android-clang"
# change android_runner.sh to ./android_runner.sh
runner = ["./android_runner.sh"]
我还修改了脚本。现在,我从路径中提取二进制文件名(例如/home/zellius/Projects/android_test/target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7(,并将其推送到设备上的某个位置。如果没有这个adb会试图把它推到更长的目录。
/data/local/tmp//home/zellius/Projects/android_test/target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7*
/android_test/android_runner.sh
#!/bin/sh
test_file_name=$(basename -- "$1")
adb push "$1" "/data/local/tmp/$test_file_name"
adb shell "/data/local/tmp/$test_file_name"
现在,我可以通过货物测试在本地x86模拟器上运行测试——目标i686-linux-android。
也许有更好的方法可以做到这一点,但目前它适用于我的情况。