Skip to content

Fix adb.push fail to push no extention file (cause minicap installation failure) #1288

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

jye110
Copy link

@jye110 jye110 commented Jun 28, 2025

修复了no extention file会被当做folder处理的问题
还重写了部分,原本push file和folder的算法混在一起,没办法处理no extention file,改成了file和folder大部分逻辑分开讨论

这个bug导致了minicap文件无法adb push进手机-》minicap installation failed

[17:24:51][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell ls "/data/local/tmp/minicap"
[17:24:52][DEBUG]<airtest.core.android.cap_methods.minicap> install minicap
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell getprop ro.product.cpu.abi
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell getprop ro.build.version.preview_sdk
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell getprop ro.build.version.release
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell rm -r /data/local/tmp/minicap/minicap
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell mkdir -p /data/local/tmp/minicap
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 push C:\Python312\Lib\site-packages\airtest\core\android\static\stf_libs\x86_64\minicap /data/local/tmp/minicap
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell mv "/data/local/tmp/minicap" "/data/local/tmp/minicap"
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell mv "/data/local/tmp/minicap" "/data/local/tmp/minicap"
[17:24:52][DEBUG]<airtest.core.android.adb> C:\Python312\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -P 5037 -s 127.0.0.1:16384 shell rm -r "/data/local/tmp/minicap"
[17:24:52][ERROR]<airtest.core.android.cap_methods.screen_proxy> b''
[17:24:52][ERROR]<airtest.core.android.cap_methods.screen_proxy> b"mv: bad '/data/local/tmp/minicap': Invalid argument\r\n"
[17:24:52][ERROR]<airtest.core.android.cap_methods.screen_proxy> Minicap setup up failed!

修复了no extention file会被当做folder处理的问题
还重写了部分,原本push file和folder的算法混在一起,改成了file和folder大部分逻辑分开讨论
@jye110 jye110 changed the title Fix ADB.push fail to push no extention file Fix adb.push fail to push no extention file (cause minicap installation failure) Jun 28, 2025
@JavierMartinz
Copy link

JavierMartinz commented Jun 30, 2025

This is happening for me too... it always fall backs to ADBCAP because of push error with the file without extension. In my case, I've used Mac and Linux, failing in both

@jye110
Copy link
Author

jye110 commented Jun 30, 2025

This is happening for me too... it always fall backs to ADBCAP because of push error with the file without extension. In my case, I've used Mac and Linux, failing in both

Yeah, it actually should fall back to JAVACAP but unfortunately JAVACAP also couldn't work in current version. I successfully fixed that by replace Yosemite.apk with an old version according to #1236.

@JavierMartinz
Copy link

JavierMartinz commented Jun 30, 2025

Did you try to monkey-patch minicap installation to upload the file using a (dummy?) extension? Did it work?

I tried your fix, but it didn't work for me either..

airtest run phone_keepalive.air --device Android://127.0.0.1:5037/1C023FDH3005FF
do not save log
[16:01:20][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF wait-for-device
[16:01:20][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell getprop ro.build.version.sdk
[16:01:20][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell ls -l /data/local/tmp/rotationwatcher.jar
[16:01:20][DEBUG]<airtest.core.android.rotation> install_rotationwatcher skipped
[16:01:20][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell app_process -Djava.class.path=/data/local/tmp/rotationwatcher.jar /data/local/tmp com.example.rotationwatcher.Main
[16:01:20][DEBUG]<airtest.utils.nbsp> [rotation_server]b'0'
[16:01:21][INFO]<airtest.core.android.rotation> update orientation None->0
[16:01:21][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell wm size
[16:01:21][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell getprop ro.sf.lcd_density
[16:01:21][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell dumpsys SurfaceFlinger
[16:01:21][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell dumpsys input
[16:01:21][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell dumpsys window displays
[16:01:22][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell getevent -p
[16:01:23][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell dumpsys package com.netease.nie.yosemite
[16:01:23][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell settings get secure default_input_method
[16:01:23][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell ime list -a
/opt/homebrew/lib/python3.11/site-packages/airtest/core/android/android.py:213: UserWarning: No need to manually specify cap_method, airtest will automatically specify a suitable screenshot method, when airtest>=1.1.2
  warnings.warn("No need to manually specify cap_method, airtest will automatically specify a suitable screenshot method, when airtest>=1.1.2")
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell ls "/data/local/tmp/minicap"
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell ls "/data/local/tmp/minicap.so"
[16:01:24][DEBUG]<airtest.core.android.cap_methods.minicap> install minicap
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell getprop ro.product.cpu.abi
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell getprop ro.build.version.preview_sdk
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell getprop ro.build.version.release
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell rm -r /data/local/tmp/minicap
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell mkdir -p /data/local/tmp
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF push /opt/homebrew/lib/python3.11/site-packages/airtest/core/android/static/stf_libs/arm64-v8a/minicap /data/local/tmp/minicap
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell mv "/data/local/tmp/minicap" "/data/local/tmp"
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell chmod 755 /data/local/tmp/minicap
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell rm -r /data/local/tmp/minicap.so
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell mkdir -p /data/local/tmp
[16:01:24][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF push /opt/homebrew/lib/python3.11/site-packages/airtest/core/android/static/stf_libs/minicap-shared/aosp/libs/android-15/arm64-v8a/minicap.so /data/local/tmp/minicap.so
[16:01:25][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF push /opt/homebrew/lib/python3.11/site-packages/airtest/core/android/static/stf_libs/minicap-shared/aosp/libs/android-15/arm64-v8a/minicap.so /data/local/tmp/minicap.so
[16:01:25][ERROR]<airtest.core.android.cap_methods.screen_proxy> ''
[16:01:25][ERROR]<airtest.core.android.cap_methods.screen_proxy> "adb: error: cannot stat '/opt/homebrew/lib/python3.11/site-packages/airtest/core/android/static/stf_libs/minicap-shared/aosp/libs/android-15/arm64-v8a/minicap.so': No such file or directory\n"
[16:01:25][ERROR]<airtest.core.android.cap_methods.screen_proxy> Minicap setup up failed!
[16:01:25][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell dumpsys package com.netease.nie.yosemite
[16:01:25][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF forward --no-rebind tcp:12135 localabstract:javacap_12135
[16:01:25][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell pm path com.netease.nie.yosemite
[16:01:25][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell CLASSPATH=/data/app/~~UpHJDVSGWBUH4v3tMOjvEw==/com.netease.nie.yosemite-pawhYTgZzqa6fSWX-ea_ww==/base.apk exec app_process /system/bin com.netease.nie.yosemite.Capture --scale 100 --socket javacap_12135 -lazy 2>&1
[16:01:25][DEBUG]<airtest.utils.nbsp> [javacap_sever]b'Capture server listening on @javacap_12135'
[16:01:25][ERROR]<airtest.core.android.cap_methods.screen_proxy> OSError('socket connection broken')
[16:01:25][ERROR]<airtest.core.android.cap_methods.screen_proxy> Javacap setup up failed!
/opt/homebrew/lib/python3.11/site-packages/airtest/core/android/cap_methods/adbcap.py:10: UserWarning: Currently using ADB screenshots, the efficiency may be very low.
  warnings.warn("Currently using ADB screenshots, the efficiency may be very low.")
[16:01:25][DEBUG]<airtest.core.android.adb> /opt/homebrew/Caskroom/android-platform-tools/36.0.0/platform-tools/adb -P 5037 -s 1C023FDH3005FF shell screencap -p
[16:01:25][DEBUG]<airtest.utils.nbsp> [javacap_sever]b''

I also saw there is an apk to be used instead https://github.com/openatx/stf-binaries/blob/master/take-screenshot-with-minicap-apk.sh

@jye110
Copy link
Author

jye110 commented Jun 30, 2025

'/opt/homebrew/lib/python3.11/site-packages/airtest/core/android/static/stf_libs/minicap-shared/aosp/libs/android-15/arm64-v8a/minicap.so': No such file or directory\n"

Oh, I guess you phone runs the latest Android 15(SDK 35). Unfortunately there is no minicap.so for this Android SDK yet. Yeah, you may have to try that apk instead. Check this btw DeviceFarmer/minicap#70

@JavierMartinz
Copy link

'/opt/homebrew/lib/python3.11/site-packages/airtest/core/android/static/stf_libs/minicap-shared/aosp/libs/android-15/arm64-v8a/minicap.so': No such file or directory\n"

I think solution for this missing file is to copy "airtest\core\android\static\stf_libs\arm64-v8a\minicap.so" to "airtest/core/android/static/stf_libs/minicap-shared/aosp/libs/android-15/arm64-v8a/minicap.so".

If I do that, it says than minicap (not .so) is missing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants