我在Linux本地计算机上运行Rust(工具链stable-x86_64-unknown-linux-gnu)。我的库可以使用Android应用程序构建并正常运行。但是,如果指定 i686-linux-android 目标,我将无法运行任何单元测试。
我可以在空项目中复制它。
我创建了新的rust项目
cargo new android_test --lib
通过 /android_test/.cargo/config
设置Android NDK ar 和链接器[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
跑步 目标/ 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/.cargo/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"]
我想念什么吗?我可以使用货物测试在模拟器上运行测试吗?还是应该为此目的使用脚本?
答案 0 :(得分:0)
通常错误很小且很愚蠢。
就我而言,我应该修复运行脚本的路径。
我的项目结构:
/。cargo
ndk
android_runner.sh
其他文件和目录
/android_test/.cargo/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"
现在,我可以通过 cargo test --target i686-linux-android 在本地x86模拟器上运行测试。
也许有更好的方法可以做到这一点,但目前它适用于我的情况。