최근 엉망이던 윙 커스텀
제작기를 드디어 어느정도 마치고 그동안 더욱 밀려있는 포스트들을 보며 간단 개발 후기를 작성해봅니다.
우선 결론부터 이야기하자면 윙 커스텀
은 안드로이드 기반의 꽤나 재미 있는 장난감이라고 할 수 있습니다.
그럼에도 비용을 최대한 아껴 저렴하게 직접 자작하는 경우를 제외한다면 아직까지 누구에게도 추천드리긴 어려운 물건입니다.
이는 윙의 세컨드 스크린
이라는 독특한 구조 덕분인데 아무리 좋게 봐줘도 따로 노는듯한 이 구조 덕분에 LG
의 윙
은 애초에 망할만했던 기기라고 생각됩니다.
먼저 결과부터 이야기하자면 루팅한 윙에서 사용이 가능한 Xposed의 후속인 Lsposed를 이용한 모듈의 적용입니다.
세컨드 스크린에 다이지쇼 런처 고정 및 화면 회전을 제어하기 위한 두가지 간단한 마지스크 모듈을 개발했습니다.
수많은 런처 중에 다이지쇼
를 고정한 이유는 LTE
및 와이파이
와 배터리 잔량
상태를 보여 주는 사실상 윙에서 가장 간단하게 적용이 가능한 서드파티 런처였기 때문입니다.
그리고 가로모드가 필요한 상황에서 해소가 가능한 화면 고정 여부를 이용해 실제 세컨드 스크린을 회전하도록 만든 모듈 역시 추가했습니다.
![](https://opencourse.kr/content/images/2024/07/IMG_2421.jpeg)
이번에 갑작스럽게 6월 중순에 지인에게 저렴하게 기기를 들이고 나서 막연히 만들어보고 싶다는 생각만 가지고 작업을 시작했습니다.
![](https://opencourse.kr/content/images/2024/07/image-1.png)
더군다나 연초부터 기대가 커서 테크 유튜버
들의 후기만 오매불망 기다리던 래빗 R1
이 스캠 급의 사실상 사기 제품
임을 알게 되면서 안드로이드 기반의 챗 GPT
전용 머신에 대한 갈증이 있었는데, 마침 상당히 타이밍이 좋게 구매가 가능했습니다.
![](https://opencourse.kr/content/images/2024/07/IMG_2919.jpeg)
먼저 윙의 부트로더 언락
부터 루팅
까지는 파편적으로나마 해외에서 자료를 구할 수 있는 편이기에 여기까진 큰 문제가 없습니다.
그러나 안타깝게도 설병기 제작자인 라오장
아저씨가 만들었다는 일종의 커스텀 롬
과 같은 관련 정보는 좀 처럼 찾질 못했습니다.
![](https://opencourse.kr/content/images/2024/07/IMG_2935.jpeg)
결국 마지스크 모듈을 직접 개발하기 전까지 엄청난 삽질을 진행하게 됩니다.
세컨드 스크린의 기본 홈 화면
수정을 위해 마지스크 모듈과 수많은 네비게이션 바 트윜을 테스트로 설치하며 테스트를 진행했으나 모두 실패했습니다.
무려 펌웨어는 안드로이드 10
, 12
, 13
등으로 총 세가지 버전에서 플레이 스토어 및 마지스크 모듈들을 설치하며 테스트를 진행했었습니다.
결론부터 이야기하자면 버전 별로 루팅에 대한 매리트는 딱히 큰 차이가 없었는데, 이는 엘지의 세컨드 스크린이 일반적인 추가 화면이라기 보단 홈런처3
에 기생하는 완전히 분리된 별도 화면의 구조를 가지고 있기 때문입니다.
결국 버전별로 루팅 앱들 역시 OS 버전에 관계 없이 지원 여부가 큰 차이도 없어서 최신버전인 안드로이드 13
으로 설치해둔 상황입니다.
테스트 덕분에 지인들 기기까지 몽땅 루팅을 진행해보았는데 여담이지만 KT
와 SK
간의 일종의 통신사 특화 앱들인 쓰레기 앱인 블로터 앱
의 개수 차이가 상당한걸 보니 당황스럽습니다.
이렇듯 작은 크기에 꽤나 훌륭한 사용성을 보일 것만 같은 윙 커스텀은 com.lge.secondlauncher
통칭 세컨드 런처
와 LG
의 홈런처3
의 어색한 연동으로 인해 매번 앱을 설치할 때마다 세컨드 스크린 앱에서 수동으로 활성화해야하는 번거로운 구조를 가졌다는 문제가 있습니다.
![](https://opencourse.kr/content/images/2024/07/IMG_2548.jpeg)
그리고 직접 제작해보니 전동 장비가 아닌, 수공구 뿐인 상황이라면 제작 난이도가 상당합니다.
퇴근 이후 밤마다 몇번이나 줄로 열심히 중간판을 갈아 내느라 진땀을 빼기도 했습니다.
보통 인터넷 상에 완제라고 판매되는 물건들이 자작에 비해 그리 비싼게 아니기 때문에 정녕 윙 자체가 궁금한 거라면 차라리 완제를 사는 편이 여러모로 유리하겠습니다.
그럼에도 저 같은 사람들은 이러한 기기들은 제작 과정
자체가 일종의 재미이기 때문에 포기할 수는 없습니다.
![](https://opencourse.kr/content/images/2024/07/IMG_2938.jpeg)
윙 커스텀의 가장 큰 문제는 시작부터 끝까지 바로 제작의 꽃인 하우징
인데 챗 GPT
전용기기로 만들기 위해 크기가 최대한 작아야만 했습니다.
쉽게 접할수 있는 제품들은 마음에 드는 사이즈가 아니어서 상당히 해멨는데, 다행히도 따로 판매는 하지 않고 계신 분에게 개인적으로 연락해 사정을 말씀드리고 소정의 의뢰비를 드리고 간신히 구매할 수 있었습니다.
보통 온라인에서 3~3.5
만원 정도에 판매 중인 출력 제품들을 보면 제작자에 따라 구성이나 퀄리티가 천차만별이기 때문에 잘 비교하고 구해보시는 것을 추천합니다.
![](https://opencourse.kr/content/images/2024/07/IMG_2990.jpeg)
결국 마지막까지 혼자 만들라면 만들 수 가 없는 기기이기 때문에 난관이 많았는데, 대략적인 완성 이후 뒷판도 못닫고 노크온도 활성화 시키질 못하고 있었습니다.
너무나 감사하게도 윙 커스텀
의 제작 경험이 많은 무풍 카페의 아재요
님이 여분 부품까지 들여가며 제 기기를 거의 다시 다시 만들어 주신 덕분에 간신히 살려낼 수 있었습니다.
![](https://opencourse.kr/content/images/2024/07/IMG_2872.jpg)
따라서 무언가 보답이라도 해드릴까 하던 차에 윙 커스텀
은 메인 화면의 다이지쇼
를 런처처럼 고정한다거나, 세컨드 스크린
만으로는 기기의 전원을 끌 수가 없다는 윙 커스텀
의 공통의 주제
가 있었기 때문에 이 문제를 해소하기 위해 루팅으로 어떻게든 해결 해보고자 런처를 변경하기 위한 여정이 시작되었습니다.
가장 먼저 대표적인 테스커(Tasker)
를 이용해 자동화를 만들어 세컨드 런처에 해당하는 기본홈(홈&앱서랍)
앱을 실행시 다이지쇼
로 보내는 설정
을 진행해봤습니다.
프로필을 만들어 두면 그럴싸하게 바로바로 이동하긴 하지만 역시나 홈 화면이 1초
정도 노출되는 문제가 있어 이게 자연스럽거나 매끄럽다고 보기엔 어려웠습니다.
루팅 감지를 하는 후후
같은 앱의 경우 마지스크 설치 이후 magisk hide
옵션을 통해 우회가 가능한 것을 확인하자 마자 Magisk Module
로 해결이 가능하지 않을까하는 생각에 네비 관련 모듈과 홈버특 액션을 변경하는 모듈들을 여러가지 설치해서 시도를 해보았습니다.
먼저 루팅이후 마지스크는 가장 잘 숨는다고 소문난 포크 버전인 마지스크 델타
를 이용했습니다.
먼저 마지스크의 hideNav
를 이용해 키보드 영역 확보 및 화면 아래쪽의 홈 영역의 pill
아이콘을 날려버리고 조금이나마 더 화면을 확보할 수 있었습니다.
통신사 앱들의 경우 de-bloter
설치를 통해 불필요한 앱을 제외시켜 정리할 수 있었습니다.
전원 종료의 경우 Classic Power Menu
를 이용해 전원 키를 두번 길게 눌러 종료가 가능하다는 것을 확인합니다. (1회차는 메인 스크린에 오버레이)
그리고 마지막으로 LG 윙
의 쓰로틀 제한
을 완화하는 XDA 개발자 A3A의 모듈
을 설치하며 기본적인 모듈 설치 작업을 완료합니다.
그리고 각고의 노력을 펼치며 제스처와 홈버튼을 제어하는 것으로 런처를 고정하려던 노력은 모두 실패로 돌아가게됩니다.
![](https://opencourse.kr/content/images/2024/07/image-2.png)
이렇게 포기할 수는 없었기에 안드로이스 스튜디오를 설치하고 막연하게 어느 중국인이 만든 로케일 모듈을 참고하여 직접 런처를 흉내내서 교체하기 위한 개발을 진행했습니다.
가장 어려운 파트는 며칠간 로그캣을 이용해 어떤 패키지가 정말 하단 세컨드 스크린인지 판단하는 부분이었습니다.
이후 화면 번호는 어떻게 되는지 테스커를 통해 확인하는 과정이 굉장히 번잡하게 진행되었습니다.
최근 바쁘다 보니 직접 PC
에서 adb
로 연결까진 못하고 외부에서 테스커의 로그캣 감시기능을 사용해 패키지명을 찾아내느라 더 고생했던 것 같습니다.
결과적으로 전체 런처는 com.lge.launcher3
에서 LauncherExtention
이란걸 통해 세컨드 스크린인 com.lge.secondlauncher
를 제어하는 것처럼 확인됩니다.
이 논리라면 com.lge.secondlauncher
패키지의 액티비티가 onCreate
혹은 onResume
되는 시점의 다이지쇼의 패키지인 com.magneticchen.daijisho
의 기본 액티비인 activities.MainActivity
로 이동할 수만 있다면 홈 화면 교체와 유사한 효과를 낼 수 있을 것 같습니다.
세컨드 스크린의 디스플레이 아이디는 4번
으로 확인했으니 이제 원한다면 4번
에만 다이지쇼
를 노출할 수 있는 것이지요.
마자막으로 설치 이후 부트루프를 피하기 위해 다이지쇼가 없다면 안내메세지를 띄우는 것으로 작업을 마무리하게 됩니다.
막상 작업하고 보니 추가로 윙의 전면 패널에 들어간 자이로 센서가 보통 제작시 빠져버리기 때문에 가로모드에 대한 욕심이 생기기 시작합니다.
따라서 사용자가 화면 회전에 대한 추가적인 모듈이 필요할 것으로 판단되는군요!
이는 별도 모듈로 앱 설치시 가로세로를 단순히 고정하기 보다 상황에 따라 사용할 수 있도록 자동회전 설정 여부를 바라보도록 별도 모듈을 추가했습니다.
모든 코드는 깃허브의 오픈소스로 공개되어 있으나 안드로이드 앱 개발 경험이 거의 없다시피하니 개선사항을 알려주시는 분들에게는 더욱 감사하겠습니다.
아이러니하게도 제 윙은 챗 GPT가 목적이었는데 루팅 덕분에 앱사용은 Magisk Hide List로 숨겨도 사실상 정상적인 사용이 불가능합니다.
순정 상태로 돌리면 앱 사용이 가능하나 불편한 점이 한둘이 아니라 당분간은 이렇게 유지할 것 같군요.
아직 내부적으로는 어설프지만 어쨌든 그럴싸한 런처 교체의 효과를 낼 수 있으니 필요하신 분들에겐 작은 도움이 되시길 바라겠습니다.
감사합니다.