无法使用 i686-linux-android 目标运行单元测试



我在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

也许有更好的方法可以做到这一点,但目前它适用于我的情况。

最新更新