# Testing Command Guide ## APK Instrumentation (sudo) acv instrument [apkname].apk Example) `sudo acv instrument ./3097cf0970513bcc35d656aa51794b73b20e66e2f03251ba9f58fe5a3068a2f5.apk` ~/acvtool/acvtool_working_dir/instr_[apkname].apk 이 생성됨 Instumentation이 끝나면 커맨드라인에 package name: bbc.mobile.news.ww 의 형태로 package_name이 뜨는데 기록해 둘 것 APK Instrumentation이 실패할 경우, 실패 로그를 txt로 기록한 뒤 실패 처리할 것. ## APK Installation (sudo) acv install [path_to_apk]/[apkname].apk 혹은 (sudo) adb install [path_to_apk]/[apkname].apk Example) `sudo acv install ~/acvtool/acvtool_working_dir/instr_3097cf0970513bcc35d656aa51794b73b20e66e2f03251ba9f58fe5a3068a2f5.apk` ## APK Uninstallation (sudo) adb uninstall ## ACV Scenario Recording (sudo) acv start [package_name] Recording을 시작하기 전에 원본 앱을 지우고, instr_[appname].apk를 재설치 한 후 진행 할 것. ## ACV Report Generation (Getting EC File) (sudo) acv report [package_name] -p ~/acvtool/acvtool_working_dir/metadata/[apkname].pickle Example) `sudo acv report us.lovebyte -p ~/acvtool/acvtool_working_dir/metadata/3097cf0970513bcc35d656aa51794b73b20e66e2f03251ba9f58fe5a3068a2f5.pickle` mnt/sdcard/us.lovebyte/onstop_coverage_1612153632421.ec: 1 file pulled. 58.7 MB/s (658956 bytes in 0.011s) 과 같은 형태로 EC 파일이 추출되었단 문구를 받고 나면 그냥 Ctrl+C로 종료해도 됨 ## Reduced APK Generation pypy demoslice.py [path_to_original_apk]/[apkname].apk ~/acvtool/acvtool_working_dir/report/[package_name]/ec_files/ ~/acvtool/acvtool_working_dir/metadata/[apkname].pickle --purge_res Example) `pypy demoslice.py ../../testset2/3097cf0970513bcc35d656aa51794b73b20e66e2f03251ba9f58fe5a3068a2f5.apk ~/acvtool/acvtool_working_dir/report/us.lovebyte/ec_files/ ~/acvtool/acvtool_working_dir/metadata/3097cf0970513bcc35d656aa51794b73b20e66e2f03251ba9f58fe5a3068a2f5.pickle --purge_res` ~/demoslice 에 temp_2348534233 형태의 폴더 생성됨. 결과로 reduced_app_[ILP 제한 용량].apk 생성됨. 현재는 무한히 작동할 가능성도 있으니, 적당히 생성되는 APK의 용량에 변화가 없다 싶으면 강제종료해 주면 됨 (곧 패치할 예정) ## Signing APK (sudo) acv sign [path_to_apk]/[apkname].apk 결과로 [apkname].apk.signed.apk 가 생성. 이걸 설치하지 않으면 서명되지 않은 앱을 깐다고 adb가 설치를 거부함. ## 기타 adb 명령어 1. 로그캣 보기 `adb logcat` : 앱이 켜지지 않을 때 관련 덤프를 기록하기에 좋음. 기록해 두면 좋다. 2. `adb shell am start -a android.intent.action.MAIN -n [package_name]/[activity_name] -d [data]` : acv start로 레코딩 할 때 특정화면으로 바로 시작하기 위해서 사용하는 명령어 -d 옵션은 안 줘도 된다. 참조 : https://samse.tistory.com/entry/adb-shell에서-특정-activity실행하기 3. 에뮬레이터가 잘 안도는 것 같으면, Android Studio의 Emulator Manager에서 Wipe Data하고 Cold Boot 하면 대부분 해결된다. ## 실험 진행 방법 1. 앱을 APKTool로 열어서 AndroidManifest.xml에서 Activity를 보고 어느 Activity를 시작으로 잡을 지 본다. 2. 앱을 Instrumentation 한다 3. 시작으로 잡은 Activity (그냥 켜도 되고, ADB로 켜도 된다)부터 2-3개의 뷰 (화면 전환), 8개 이상의 클릭 이벤트 (이건 임의로 줄이거나 늘여도 좋다) 정도를 녹화한다. 4. 리포트를 생성하고 demoslice 툴을 돌린다. 5. 결과를 가지고 똑같은 시나리오에 대해서 테스트 한다. 6. 작동하면, pickle과 ec파일, 시나리오 녹화 영상, 줄어든 APK를 구글 드라이브에 업로드한다.