1단계: 수정 대상 앱 또는 시스템 프레임워크 확보

특정 앱을 수정하고 싶다면,

  • 앱 파일 획득

    • 기기에서 직접 추출
      요즘 파일 탐색기에 다들 앱 추출 기능이 있죠. 아니면 Send Anywhere 앱도 있고요.

    • APK 공유 사이트 이용
      저는 APKMirrorAPKPure를 이용하는데요, APKPure 사이트는 왜인지 모르게 중국 풍이 느껴지기는 하지만 한국 개발사 포함해서 각종 앱이 다 있습니다. 혹 변조되었을지 두려운 마음 조금 있지만, 디지털 서명을 믿을 수밖에요. (서명 v1은 뚫릴 수 있다던데... 설마...)

한편 휴대폰 UI를 바꾸고 싶다면,

  • 시스템 프레임워크 파일 획득: 보통 아래 파일을 획득하면 되는 것 같습니다.
    • /system/framework/framework-res.apk : 안드로이드 OS 공통
    • /system/priv-apps/SystemUI.apk : 상태바, 내비게이션 버튼 등 시스템 요소 그리는 애
    • 또한 /system/framework 디렉토리에 제조사별 커스텀 리소스도 있으니 함께 확보해야 합니다.

그 외에 프레임워크 소스 파일, Settings.apk도 확보하셔서 소스를 들여다보면 이 리소스가 어디에 쓰이는지 아는 데 도움이 됩니다. 문제는 안드로이드 OS 5.0부터 ART를 도입하고, 그 후로 갖가지 최적화가 적용되면서 소스 파일이 점점 숨어들어갔습니다. 디컴파일해서 소스 들여다보기가 쉽지는 않습니다.

2단계: 역컴파일 툴 통해 코드 및 리소스 분석

최근 저는 JADX 즐겨 쓰고 있습니다. 별다른 복잡한 조작 없이 달빅 바이트코드를 자바 코드로 바꿔 보여주고, 전체 코드 검색 가능한 점이 좋습니다. 리소스 대상으로는 키워드 검색 안 되는 점은 아쉬워요.

JADX 개발자님들께 이 자리를 빌어 감사드립니다. 물론 의미없죠..
JADX 프로젝트 홈페이지

팁은... 잘 모르겠고... 감으로 때려맞추고 이래저래 하다보면 답이 나옵니다...

한편, 시스템 프레임워크를 수정한다면 제조사 또는 서드파티 테마 파일을 열어보는 것도 좋습니다. 어디를 건드려야 할 지 가이드가 되거든요.

 

(3)편에서 계속...

와디즈 펀딩을 통해 구입한 피아톤 볼트 완전무선 이어폰입니다. 핵심 장점은,

  • 이어폰 + 포터블 스피커 2in1 구성
  • 피아톤표 BA 드라이버 탑재로 수준급 음질 제공
  • 귀에서 빠지지 않게 하는 "이어윙"

입니다.

이어폰+스피커 2in1 구성

재미있는 기믹이지만 저한테 매우 유용하지는 않습니다. 놀러갈 때 쓸만한데, 놀러갈 일이 별로 없어서........ 또, 스피커 크기 한계상 소리가 압도적이지는 않은 점이 조금 아쉽습니다. 제 휴대폰 (LG G7) 대비 큰 차이가 느껴지지는 않았습니다.

2in1 하느라 생긴 가장 큰 문제는.. 스피커를 장착하느라 충전 케이스가 커진 점입니다. 주머니에 잘 안 들어가고, 넣으면 불룩해서 불편하고요. 에어팟과 비교하기는 에어팟 케이스가 워낙 작아서 민망하고, 다른 메이저 제품과 비교해서 큼직한 것이 불편합니다.

음질

(iOS 기기 / 안드 8.0 이상에서 지원되는) AAC 코덱을 잘 지원하고요, 피아톤표 BA 드라이버 덕분에 막귀로는 동사 유선 이어폰과 구별 안 되는 좋은 음질입니다. 저음 좋고, (커널형 감안해서) 고음 깨끗합니다. 음질에 불만이 없어요.

저는 번들 실리콘 팁은 음질 면에서 별로였고, 알리발 짭 폼팁 쓰니 괜찮았습니다. (TWS용 짧은 폼팁 말고, 일반 폼팁을 썼습니다.) 컴플라이 정품 폼팁 쓰면 더 좋을 거에요.

퀄컴 칩셋이 아니라 그런지 Apt-X 지원이 안 되어서 아쉬운 점은 있습니다. AAC로도 충분한 것 같지만요.

편리한 이어윙

유닛에 귀에서 빠지지 말라고 만든 실리콘 "이어윙"이 있습니다. 나름 인체공학적인 보스 이어폰에 달린 것과 비슷한데요, "이갑개정"(방금 검색함)에 이어윙을 걸쳐놓는 식입니다. 별 것 아니어 보이지만 얘 덕분에 귀에서 안 빠집니다. 배터리 때문인지 유닛이 나름 큰데도, 이어윙 덕분인지 무게로 인한 불편함이 없기도 해요.

편의성에서 아쉬운 점

  • 출시 후 업데이트를 받았지만, 그래도 지하철에서 끊기기는 끊깁니다. (이후에 업데이트가 또 있었는지 모르겠네요.)

  • 충전 없이 케이스에 오래 놓아두면 (4-5일) 방전됩니다. 관리를 잘 못 한 것인지 모르겠네요.

  • 에어팟처럼 멀티포인트 연결이 지원되지 않아서, 다른 기기에 연결하려면 먼저 이전 기기와의 연결을 끊어야 합니다.

  • 이어폰 유닛 위의 볼륨 조절 버튼이 대충 누르면 잘 안 눌립니다. 적절한 방법으로 누르면 되지만요. 뽑기 실패일 수도 있겠네요.

  • 험하게 쓰니 흰둥이 케이스 도색이 점점 벗겨지네요 ㅠ.ㅠ

  • 무선 충전 안 됨...

마지막으로

본 제품이 출시되자마자...

  • 다음 세대 TWS 칩셋을 장착한 제품이 우수수 쏟아져나왔고
  • 저가형에서는 QCY T1

  • 고가형에서는 애플 에어팟 및 소니, 젠하이저 등에서 만든 제품들

  • 시장 점유율을 위해 S10 사은품 정책을 들고나온 삼성 갤럭시 버즈

쏟아져나온 탓에 가격 우위를 점하기 힘들어 보였습니다. 고객을 끌어들이기에는 이 제품의 특징인 스피커 기믹, 그리고 피아톤표 BA 드라이버가 타사 대비 압도적이지는 않으니까요.

다음 제품에서는 피아톤의 자랑 (가성비) 노이즈 캔슬링을 밀면 좋겠으나, 노캔 TWS 시장을 싹 쓸어갈 에어팟 프로, 그리고 제품 가격을 생각하면 더 가까운 적수일 아마존 에코 버즈가 나왔네요. 문외한이 보기에도 쉽지 않아 보입니다.

다음 제품에서 이러한 어려운 시장 환경을 어떻게 헤쳐나갈 지 기대가 됩니다.

RRO 또는 runtime resource overlay

개념

안드로이드 앱 패키지의 주요 구성 요소는 코드, 리소스라 할 수 있습니다. 이 중 리소스에는 색상, 문자열 같은 단순 값부터, 그림 (drawable), 그리고 (XML) 레이아웃 등이 들어있는데요.

(런타임) 리소스 오버레이는 앱 패키지를 불러올 때, 원래 앱의 리소스를 사용자가 설치한 오버레이 패키지의 리소스로 덮어씌워주는 도구입니다.

소니 모바일 팀에서 개발했고 6.0 - 7.0 시절에 AOSP에 기부했다고 하고요, 8.0부터 본격적으로 도입이 된 것 같아요. 삼성, LG를 포함해서 많은 제조사들이 이 리소스 오버레이 기능을 바탕으로, 휴대폰 테마 기능을 개발하여 적용했습니다. substratum 테마 앱도 리소스 오버레이를 기반으로 작동하죠.

한계

  • 소스 코드를 고칠 수 없습니다. 당연하죠.
  • 새 버전이 나올 때마다 변경 사항이 있는지 보고 반영해야 합니다. 못할 짓이죠.
  • 앱 오류, 또는 시스템 전체에 오류를 일으킬 수 있습니다
    • 단순한 값 변경도 경우에 따라 코드에서 부작용을 일으킬 수 있습니다
    • 레이아웃처럼, 코드에서 리소스 내부 구성요소에 (예. 레이아웃 내 뷰) ID로 접근한다던지 하면, 없어진 요소를 프로그램에서 찾지 못하고 NullPointerException 예외를 일으킬 수 있는 등 예기치 못할 위험이 있습니다

안드로이드 9.0 파이 제한 사항 및 우회 방안

다만 안드로이드 9.0부터는 구글이 보안 개선을 이유로 제조사 서명이 되지 않은 리소스 오버레이는 설치할 수 없도록 제한했습니다. 보안 위협 시나리오가 어떤 것이 있을지..., 소설을 써 보겠습니다만 실현 가능성이 없어 보이네요.

  • 사악한 DLC 앱: 스토어에는 검수하기에 멀쩡해 보이는 앱을 게시하고, 사용자를 속여 리소스 오버레이가 설치되면 오버레이에 정의된 플래그 값을 읽어서 숨겨진 사악한 기능이 활성화되는 앱. 구글 검수를 퍽이나 통과할 수 있겠죠?
  • 앱 기능 망치기: 특정 상수값을 고쳐서 앱 동작을 방해한 뒤, 기밀 정보를 빼돌리기. 참 쉽겠죠?

삼성 기기의 경우 S9/노트9 빼고는 설치 제한이 걸린 것으로 보입니다. 만, 플레이스토어에 파이 OS용 리소스 오버레이 기반 테마 제작 앱이 있습니다. 대단합니다. *Synergy
LG 기기는 사용자 테마를 만들고 그 안에 직접 만든 리소스 오버레이를 넣어둘 수 있습니다. 안 막히기를 바랍니다.

제작 절차

  • 수정하려는 앱 및 시스템 프레임워크 파일을 획득
  • 역컴파일 툴 (JADX 추천) 통해 코드 및 리소스 분석
  • 리소스 오버레이 프로젝트 폴더 준비: AndroidManifest.xml 파일, res 폴더
  • 수정할 리소스 만들어 넣기
  • aapt 툴 통해 프로젝트를 APK 파일로 생성, 서명 후 기기에 설치

 

(2)편에서 계속...

+ Recent posts