SNTSVV / ATUA

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Confusions when running ATUA

Connor-fire opened this issue · comments

This is a very meaningful work. I tried to run ATUA, but got confused:

  1. As shown in the red box in the figure, must the materials prepared before running ATUA adopt this naming format? If yes, what do [v1][v2] refer to?
    image

  2. When I finish pre-running ATUA, and run ATUA by command ./gradlew run, it seems to be in the state shown in the picture for a long time (over an hour).
    image

Hi @Connor-fire,

We appreciate your interest in one of our research tools.

Answer to your question 1:
Since ATUA is developed to test updated methods between an older app version (V1) and a newer app version (V2). The naming convention reflects the compared versions. It also helps ATUA find the App model file and the instrumentation info file without having to specify these 2 files. However, I also have an impression that allowing users to specify these files is a good idea too.

Answer to your question 2:
It is strange that it was built for a such long time. We may need more information to investigate the problem. Could you try please try some troubleshooting methods (https://docs.gradle.org/current/userguide/troubleshooting.html) to get more information related to the problem?

Best.

Chanh-Duc.

Thank you very much for your reply. In fact, I am not very skilled in using gradle. This is the log output produced after executing the ./gradlew run command:

Configure project :
determine release artifacts
[root project 'atua', project ':common', project ':deviceDaemonLib', project ':explorationModel', project ':project:pcComponents:core', project ':project:pcComponents:exploration']

Task :run
17:08:53.595 [main] INFO API-Command - Bootstrapping DroidMate: building ConfigurationWrapper from args and instantiating objects for ExplorationAPI.
17:08:53.597 [main] INFO API-Command - IMPORTANT: for help on how to configure DroidMate, run it with --help
17:08:53.951 [main] DEBUG org.droidmate.configuration.ConfigurationBuilder - memoizedBuildConfiguration(args, fileSystem)
available build-tools:
33.0.2
28.0.3
29.0.2
30.0.3
max build tools (33.0.2, 3302)
available platforms versions:
android-15
android-23
android-10
android-17
android-28
android-8
android-33
android-16
android-33-ext5
android-11
android-14
android-29
17:08:53.997 [main] DEBUG org.droidmate.configuration.ConfigurationBuilder - Using uiautomator2-daemon.apk located at /home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/deviceControlDaemon.apk
17:08:54.001 [main] DEBUG org.droidmate.configuration.ConfigurationBuilder - Using uiautomator2-daemon-test.apk located at /home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/deviceControlDaemon-test.apk
17:08:54.078 [main] DEBUG org.droidmate.misc.SysCmdExecutor - Injecting API redirection code into monitor class
17:09:36.367 [main] DEBUG org.droidmate.misc.SysCmdExecutor - Temporary monitor compilation directories cleaned up
17:09:36.367 [main] DEBUG org.droidmate.configuration.ConfigurationBuilder - Using monitor.apk located at /home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/monitor.apk
17:09:36.368 [main] DEBUG org.droidmate.configuration.ConfigurationBuilder - Using api_policies.txt located at /home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/api_policies.txt
17:09:36.368 [main] DEBUG org.droidmate.configuration.ConfigurationBuilder - Reading APKs from: /home/lgy/AndroidTools/ATUA/ATUA-master/./apks
17:09:36.376 [main] DEBUG org.droidmate.configuration.ConfigurationBuilder - --------------------------------------------------------------------------------
Working dir: /home/lgy/AndroidTools/ATUA/ATUA-master

JVM arguments: [-Dfile.encoding=UTF-8, -Duser.country=CN, -Duser.language=zh, -Duser.variant]

Configuration dump:

aaptCommand=/home/lgy/Android/Sdk/build-tools/33.0.2/aapt
adbCommand=/home/lgy/Android/Sdk/platform-tools/adb
apiPoliciesFile=/home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/api_policies.txt
apksDirPath=/home/lgy/AndroidTools/ATUA/ATUA-master/./apks
cfg=com.natpryce.konfig.Override@4e096385
coveragePortFile=
deviceSerialNumber=
droidmateOutputDirPath=/home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output
droidmateOutputReportDirPath=/home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/report
fileSystem=sun.nio.fs.LinuxFileSystem@649bec2e
monitorApk=/home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/monitor.apk
monitorPortFile=
reportInputDirPath=/home/lgy/AndroidTools/ATUA/ATUA-master
resourceDir=/home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources
uiautomator2DaemonApk=/home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/deviceControlDaemon.apk
uiautomator2DaemonTestApk=/home/lgy/AndroidTools/ATUA/ATUA-master/./droidmate_output/temp_extracted_resources/deviceControlDaemon-test.apk

End of configuration dump

17:09:36.391 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy org.droidmate.exploration.strategy.DefaultStrategies$actionBasedTerminate$1@93d935ae.
17:09:36.392 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy org.droidmate.exploration.strategy.DefaultStrategies$timeBasedTerminate$1@4206ef85.
17:09:36.392 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy org.droidmate.exploration.strategy.DefaultStrategies$resetOnAppCrash$1@dafaf2c4.
17:09:36.392 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy org.droidmate.exploration.strategy.DefaultStrategies$allowPermission$1@baf2c408.
17:09:36.392 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy LoginWithGoogle.
17:09:36.392 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy org.droidmate.exploration.strategy.DefaultStrategies$handleAdvertisment$1@38793dce.
17:09:36.392 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy org.droidmate.exploration.strategy.DefaultStrategies$handleTargetAbsence$1@ced167b4.
17:09:36.392 [main] INFO org.droidmate.exploration.strategy.ExplorationStrategyPool - Registering strategy org.droidmate.exploration.strategy.atua.ATUATestingStrategy@58d75e99.
17:09:36.406 [main] INFO org.droidmate.api.ExplorationAPI - EXPLORATION start timestamp: Tue Jun 06 17:09:36 CST 2023
17:09:36.406 [main] INFO org.droidmate.api.ExplorationAPI - Running in Android org.droidmate.configuration.ConfigurationWrapper@47d9a273.androidApi compatibility mode (api23+ = version 6.0 or newer).
17:09:36.424 [main] INFO org.droidmate.tools.ApksProvider - Reading input apks from /home/lgy/AndroidTools/ATUA/ATUA-master/./apks
17:09:36.481 [main] INFO org.droidmate.tools.ApksProvider - Following input apk is not inlined: org.tomdroid_11_14-instrumented.apk
17:09:36.482 [main] INFO org.droidmate.tools.ApksProvider - Used input apks file paths: org.tomdroid
17:09:36.482 [main] INFO org.droidmate.command.ExploreCommand - Not inlined input apks have been detected, but DroidMate was instructed to run anyway. Continuing with execution.
17:09:36.482 [main] INFO org.droidmate.tools.AndroidDeviceDeployer - Setup device with deviceSerialNumber of emulator-5554
17:09:36.486 [main] INFO org.droidmate.device.AndroidDevice - Using monitor_port.tmp located at /tmp/monitor_port.tmp7696858568406249989.tmp
17:09:36.486 [main] INFO org.droidmate.device.AndroidDevice - Using coverage_port.tmp located at /tmp/coverage_port.tmp2651468374587679420.tmp
|S-chain|-<>-127.0.0.1:7891-<><>-127.0.0.1:5037-<><>-OK
error: protocol fault (couldn't read status): Connection reset by peer
17:09:36.498 [main] DEBUG org.droidmate.device.AndroidDevice - uninstallApk(org.droidmate.uiautomator2daemon.UiAutomator2Daemon.test, ignoreFailure: true)
17:09:36.507 [main] DEBUG org.droidmate.misc.Utils - Discarded org.droidmate.device.android_sdk.AdbWrapperException: org.droidmate.misc.SysCmdExecutorException: Failed to execute a system command.
Command: [/home/lgy/Android/Sdk/platform-tools/adb, -H, localhost, -s, emulator-5554, shell, pm, list, packages]
Captured exit value: 1
Execution time: 0 seconds
Captured stdout:
Captured stderr: |S-chain|-<>-127.0.0.1:7891-<><>-127.0.0.1:5037-<><>-OK
adb: protocol fault (couldn't read status): Connection reset by peer
from "device.reinstallUiautomatorDaemon()". Sleeping for 5000 and retrying.
17:09:41.511 [main] DEBUG org.droidmate.device.AndroidDevice - uninstallApk(org.droidmate.uiautomator2daemon.UiAutomator2Daemon.test, ignoreFailure: true)
Exception in thread "main" org.droidmate.device.android_sdk.AdbWrapperException: org.droidmate.misc.SysCmdExecutorException: Failed to execute a system command.
Command: [/home/lgy/Android/Sdk/platform-tools/adb, -H, localhost, -s, emulator-5554, shell, pm, list, packages]
Captured exit value: 1
Execution time: 0 seconds
Captured stdout:
Captured stderr: |S-chain|-<>-127.0.0.1:7891-<><>-127.0.0.1:5037-<><>-OK
adb: protocol fault (couldn't read status): Connection reset by peer

    at org.droidmate.device.android_sdk.AdbWrapper.listPackages(AdbWrapper.kt:326)
    at org.droidmate.device.android_sdk.AdbWrapper.isApkInstalled(AdbWrapper.kt:197)
    at org.droidmate.device.android_sdk.AdbWrapper.uninstallApk(AdbWrapper.kt:170)
    at org.droidmate.device.AndroidDevice.uninstallApk(AndroidDevice.kt:486)
    at org.droidmate.device.AndroidDevice.reinstallUiAutomatorDaemon(AndroidDevice.kt:514)
    at org.droidmate.device.deviceInterface.RobustDevice$reinstallUiAutomatorDaemon$2.invokeSuspend(RobustDevice.kt:703)
    at org.droidmate.device.deviceInterface.RobustDevice$reinstallUiAutomatorDaemon$2.invoke(RobustDevice.kt)
    at org.droidmate.misc.Utils$Companion.retryOnException(Utils.kt:57)
    at org.droidmate.misc.Utils$Companion$retryOnException$1.invokeSuspend(Utils.kt)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.ResumeModeKt.resumeMode(ResumeMode.kt:67)
    at kotlinx.coroutines.DispatchedKt.resume(Dispatched.kt:272)
    at kotlinx.coroutines.DispatchedKt.dispatch(Dispatched.kt:261)
    at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:218)
    at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:227)
    at kotlinx.coroutines.CancellableContinuationImpl.resumeUndispatched(CancellableContinuationImpl.kt:299)
    at kotlinx.coroutines.EventLoopImplBase$DelayedResumeTask.run(EventLoop.kt:298)
    at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.kt:116)
    at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:76)
    at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:53)
    at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
    at org.droidmate.api.ExplorationAPI.main(ExplorationAPI.kt:66)

Caused by: org.droidmate.misc.SysCmdExecutorException: Failed to execute a system command.
Command: [/home/lgy/Android/Sdk/platform-tools/adb, -H, localhost, -s, emulator-5554, shell, pm, list, packages]
Captured exit value: 1
Execution time: 0 seconds
Captured stdout:
Captured stderr: |S-chain|-<>-127.0.0.1:7891-<><>-127.0.0.1:5037-<><>-OK
adb: protocol fault (couldn't read status): Connection reset by peer

    at org.droidmate.misc.SysCmdExecutor.executeWithTimeout(SysCmdExecutor.kt:117)
    at org.droidmate.misc.SysCmdExecutor.execute(SysCmdExecutor.kt:55)
    at org.droidmate.device.android_sdk.AdbWrapper.listPackages(AdbWrapper.kt:317)
    ... 21 more

Caused by: org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:153)
at org.droidmate.misc.SysCmdExecutor.executeWithTimeout(SysCmdExecutor.kt:101)
... 23 more

Task :run FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':run'.

Process 'command '/home/lgy/ExperimentEnvironment/Java/jdk-8u361-linux-x64/jdk1.8.0_361/bin/java'' finished with non-zero exit value 1

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 13m 55s
23 actionable tasks: 5 executed, 18 up-to-date

According to the log, ATUA was successfully executed and it encountered problems with Adb command execution. The cause was "adb: protocol fault (couldn't read status): Connection reset by peer". Could you please send to me the inputs (apk, apk.json, and app model file)? I will test them on my side.

Best.

Thank you so much! All files in the compressed package.

test.zip

Hi @Connor-fire,

Can you try the following suggestions?

  • Remove the intent.json file since it is from the template and contains incorrect information related to your app.
  • Check out the newest version since I just fixed a bug. However, this is another bug. I did not observe the problems in your logs.
  • Restart the Adb server and restart the emulator.

Best.

I just found that you may not properly instrument the apk file. The apk.json file is empty. The new version of Extended-DM2-Instrumenter now takes arguments from args.txt. Unfortunately, I put a package name in args.txt so that if you leave the file without modification, it will not instrument your application's code.

Thank you so much! After taking your previous method, ATUA can work normally.
But I am still a bit confused: after I successfully run ATUA once, it still takes a lot of time to resolve dependencies when I run ATUA next time (as shown in the figure). Normally, gradle caches the dependencies for the first time. Or does ATUA have to re-parse and download dependencies every time it runs.

image

Normally, gradle will cache the dependencies. You can also try offline mode.

./gradlew --offline build

Sincere thanks for your patience in answering. I'll try it later. I will close this issue.

You are welcome. Also, thanks to your apk, I spotted an infinity loop but just fixed it.