개발 조각글

NOX - ./adb.exe logcat

BaekNohing 2022. 8. 11. 19:30

a cute cat snail

NOX - ./adb.exe logcat 요약
./adb.exe devices
> portNumber
./adb.exe connect 127.0.0.1:[###portNumber###]
./adb.exe shell ps | grep com.패키지이름,패키지이름 
> pidNumber
./adb.exe logcat --pid=[###pidnumber###] 
순서대로 실행하는 것으로 Nox에서 실행되는 패키지의 log를 볼 수 있다.

adb란?

에디터상에서는 Debug.log(" ");로 손쉽게 로그를 확인할 수 있지만. 빌드로 넘어가게 되면 안드로이드에서는 확인하기 어렵다. 이럴때를 위해 필요한 것이 adb (Android Debug Bridge)이다.

https://developer.android.com/studio/command-line/adb?hl=ko

 

Android 디버그 브리지(adb)  |  Android 개발자  |  Android Developers

기기와 통신할 수 있는 다목적 명령줄 도구인 Android 디버그 브리지를 알아보세요.

developer.android.com

안드로이드 스튜디오의 사용자 가이드를 보면,

이 도구는 다음과 같은 세 가지 구성요소를 포함하는 클라이언트-서버 프로그램입니다.

명령어를 전송하는 클라이언트. 클라이언트는 개발 머신에서 실행됩니다. adb 명령어를 실행하여 명령줄 터미널에서 클라이언트를 호출할 수 있습니다.
기기에서 명령어를 실행하는 데몬(adbd). 데몬은 각 기기에서 백그라운드 프로세스로 실행됩니다.
클라이언트와 데몬 간의 통신을 관리하는 서버. 서버는 개발 머신에서 백그라운드 프로세스로 실행됩니다

adb는 클라이언트, 데몬, 서버 이 세가지로 구성됨을 알 수 있는데. 우리는 주로 클라이언트를 조작해 서버를 통해 기기내의 데몬과 통신함으로써 우리가 원하는 로그를 얻어내게 된다는 것을 알 수 있다. 

adb를 사용하기위해선, adb를 구동할 기기 뿐만 아니라 연결 대상이 될 안드로이드 기기가 필요한데(당연하다;). 안드로이드에서 개발자 모드를 활성화하고.. 케이블을 찾고..  USB를 연결해 디버그모드를 허용하고..이런 일련의 과정이 너무 번거로워서 Nox 앱 플레이어로 대체하여 사용하고 있다.

또한 Nox와 같은 앱플레이어는 에뮬레이터라서, 특정 부분만 구현하는 시뮬레이션(ios)와 달리 시스템 전체를 복사하기 때문에 (참고) 실 기기를 대체하기에 충분하다고 판단했다. 


Nox와 adb연결하기

Nox에서도 안드로이드에서와 동일하게, 설정(App) > 정보 > 버전정보를 연타해서 개발자모드를 열 수 있는데, 그 전에 Nox 시스템 설정 > 일반 에서 Root모드를 켜주고 재부팅을 해주어야 한다. 전자의 설정은 앱 형태로 Nox의 다른 앱들 사이에, 후자의 시스템 설정은 Nox 창 최상단에 톱니바퀴 모양으로 존재하고 있으므로. 주의해야 한다.

시스템 설정이 끝나면, ProgramFile에서 Nox가 설치된 폴더로 들어가야 하는데. (최초에 Nox를 설치할 때 지정한 그 경로로 들어가면 된다.) 해당 폴더 안에 있는 bin폴더에 들어가게 되면. adb.exe가 있는 것을 확인할 수 있다. 여기에 있는 이 adb를 사용해서 연결해야 하는데. 일반적으로 배포되고있는 adb의 서버/클라이언트버전 과 nox의 adbd(데몬) 버전이 서로 다르기 때문에 (현재는 Nox = 36, 배포 = 40) 상기한 폴더 내부에 있는 adb를 사용해 주어야 한다.

터미널에서 직접 해당 폴더로 찾아들어가도 되겠지만. 해당 폴더 바탕의 적당한 빈 공간에다가 우클릭을 찍고 터미널에서 열기를 선택하면 이 폴더가 ./로 잡혀있는 터미널을 열 수 있다. (내 경우에는, Git Bash를 사용하기 때문에 이런 형태를 띄고있었다) 해당 터미널에 다음과 같은 명령어를 입력할 수 있는데. 

./adb.exe devices
> Nox가 연결되어있는 포트번호가 뜬다.

./adb.exe connect 127.0.0.1:###아까 나온 포트번호###
> connected to ###연결하려고 하는 포트번호###

./adb logcat

위에서부터 순서대로,

  • ./adb.exe devices : 연결되어있는 디바이스를 찾고
  • ./adb.exe connect ### : 찾은 디바이스에 연결을 시도하고
  • ./adb.exe log cat : 해당 디바이스에서 돌아오는 log들을 출력하는 명령어이다.  

이를 통해 디바이스에서 현재 발생하는 로그들을 다 받아서 출력할 수 있다. 뿐만 아니라

./adb.exe shell ps | grep com.패키지이름,패키지이름

으로 특정 앱이 실행되는 pid를 얻어낸 뒤

./adb.exe logcat --pid=###pidnumber###

이런식으로 특정 앱에서 나오는 로그만 본다거나

./adb.exe logcat --pid=###pidnumber### 2>&1|tee ./logcat_log.txt

그 로그를 출력하면서 & 파일에다 저장해둘 수 있다.