짱해커가 되어보자

[Window]ADB Airplain Mode 본문

프로그래밍_일반/개발 삽질

[Window]ADB Airplain Mode

Spadework 2020. 3. 9. 23:48

삽질 환경 : Windows 10

대상 OS : Android 10.0 & 9.0 & 8.0

 

  • ADB는 Android Debug Bridge의 약자로, 안드로이드의 제어를 가능하도록 돕는 드라이버라 보면 될 것 같다

  • ADB의 중 비행기 모드 ON/OFF 기능을 구현하며, 실수한 부분과 기능 구현의 두 가지 방법을 소개하려 한다

 

실수

1. 권한 문제

error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong
  • 핸드폰과 PC의 연결에서 핸드폰의 권한 허용을 안했을 시 발생하였다

  • 이후 재연결하여 권한 허용

 

2. 개발자 모드 & USB 디버깅 문제(권한)

error: no devices/emulators found
  • 핸드폰에서 개발자 모드 기능을 안키거나, USB 디버깅 권한을 허용 안했을 시 발생하였다

 

비행기 모드 제어

본 글의 핵심 부분이다. 크게 두 가지 방법을 테스트 해보았다

 

1. SVC data Disable & Settings Put Global airplan_mode_on

adb shell svc data disable
adb shell settings put global airplane_mode_on 1

adb shell svc data enable
adb shell settings put global airplane_mode_on 0
  • 2,4번째 줄이 비행기 모드를 제어하는 것이다

  • svc data의 경우 데이터 on/off인데 비행기 위 코드의 경우 비행기 모드를 키지만, UI 상으로 데이터는 켜져있다. 그렇기에 추가하였다

  • 여기서 다음 두 번째 방법을 시도한 이유로, 해당 코드는 문제 없으나, 8.0 & 9.0 환경에서는 비행기 모드에 on/off 신호가 안들어 온 것 처럼 보였다(실제로는 작동. 비행기모드 off 상태에서 데이터를 누를 시 비행기모드 사용 중이라 표시)

 

2. Input Keycode

adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS
adb shell input keyevent 22 # Enable/Disable Field
adb shell input keyevent 23 # Click Event
  • 수동 액션과 같이 동작하는 코드이다

  • 비행기 모드 페이지로 들어가, 키코드 22와 23을 실행시켜 비행기모드를 제어한다

  • 해당 부분에서도 여러 문제가 있었는데, OS 버전마다 키코드가 다르다. UI 차이로 인해, DOWN or RIGHT 차이가 발생한다

  • On/Off 필드로 가기위해 동일한 키코드를 2번 입력해야 하였다. Input (22, 22, 23)

  • 수동 액션의 경우 1번에 비해 버전 차이로 인해 문제가 발생할 수 있다

 

추가적으로 이동에 관련한 키코드 코드이다

19 ->  "KEYCODE_DPAD_UP" 
20 ->  "KEYCODE_DPAD_DOWN" 
21 ->  "KEYCODE_DPAD_LEFT" 
22 ->  "KEYCODE_DPAD_RIGHT" 
23 ->  "KEYCODE_DPAD_CENTER"

'프로그래밍_일반 > 개발 삽질' 카테고리의 다른 글

[Pyinstaller]PyQt5 호환성 문제  (0) 2020.03.09
Comments