이전 글에 이어서,

(추가) SSH/셸스크립트 실행을 지원하는 커스텀 펌웨어인 경우!

번거로운 SCP 파일 복사 작업 없이도 간편하게 안내 음성 파일을 바꿀 수 있다 하여 소개해 봅니다.
나온지 오래되어 보이는데 이제야 알게 되었네요.

덤: 중국어 vs. 글로벌(영문) 펌웨어 차이 (뇌피셜)

공통으로 안 되는 것

  • GPS 신호로 현재 시간 설정하기 (시간 자동 동기화 방법은 휴대폰 연동 뿐입니다)

중국어판 특징

  • 타임랩스 주차모드 지원
    • 감지되는 동작, 충격 없다면 1fps 저속 촬영으로 메모리 공간, 전력 절감 (국내 기기에도 다 있는 기능이죠)
    • ACC/상시전원을 구분할 전용 전원 케이블이 필요합니다
  • GPS 좌표 기록조차 안 됨
  • WDR 기능 v1.0.8에서 글로벌판에도 메뉴가 추가된 것 같습니다 아직 못 써봐서..
    • (주: 주야간을 고려한 자동 화면 대비 조절 기능인 것 같습니다)
중국어 버전에서만 되는 기능이 있어서, 4PDA 포럼 자료를 보시면 "중국어 펌웨어 + 영문 화면+음성" 짜깁기한 펌웨어가 배포되고 있습니다.

글로벌판 특징

  • GPS 좌표가 영상 파일에 메타데이터 형태로 기록됨

덤: 20년 3월 현재 최신 v1.0.8 영문판 커스텀 펌웨어 (불펌)

기왕 작업하는 김에 최신 펌웨어이면 좋겠죠.

러시아 4PDA 포럼(Shkiper-vr6님)에서 무단 불펌한... v1.0.8 영문 버전의 최신 커스텀 펌웨어입니다.

v1.0.8에서 달라진 점은:

  • 언어 선택 기능 추가
  • 일본어 화면 언어+음성 언어 추가... 한국어는??
  • WDR 메뉴 추가 (이상하게도 앱에서는 안 나왔습니다)

그와 별개로 커스텀 펌웨어의 장점 중 제가 주목한 점은 다음과 같습니다:
(1) GPS 모듈 장착 시 MP4 영상에 기록된 좌표를 SRT 자막 파일로 추출
(2) SSH 접속 가능 -- 안내 음성 파일 바꿀 때 사용
(3) USB 장치 인식 가능 (주: 안 써봐서 어디 쓰는지는 잘..)
(4) 시작 시 "autorun_"으로 시작하는 셸스크립트 실행 기능 ← 보다 간편한 음성 교체를 위해 쓸 기능입니다

아래 링크에서 다운로드하시고,

OTA_38_FULL_70mai_d05_v1.0.8na_20200226_1828_full_ssh_gps_usb.7z

4PDA 포럼에서 직접 다운로드하실 분들은(비회원일 시 다운로드 링크가 동작하지 않습니다),
아래 두 링크를 참조하셔서 회원가입/로그인 시 필요한 키릴 문자 캡챠 연옥에서 탈출하세요:
러시아어 숫자 강제 공부중... - 토픽게시판 - XETOWN
4pda.ru 에 가입했습니다. - 아무 의미 없는 삽질기

  • 압축 파일의 "update" 폴더를 통째로 블랙박스의 SD카드에 넣으신 후,
    • SD카드의 최상위 폴더에 넣으시면 됩니다. 즉, 'event' 폴더 같은 기본 폴더와 같은 경로에 두세요.
  • 블랙박스의 전원이 꺼진 상태에서
    • (1) 화면 하단 버튼 4개 중 가장 우측 버튼과
    • (2) 그 아래 가로로 길쭉한 전원 버튼을
    • 동시에 누르고 계시다가, "업데이트 중" 화면이 뜨면 손을 떼세요.

(20년 3월 기준) 최신 버전이 되었습니다!

네이버 클로바 표 한국어 안내 음성으로 교체하기

(추가) 위 문단처럼, SSH/셸스크립트 실행을 지원하는 커스텀 펌웨어를 먼저 기기에 설치하세요!

음성 파일 중 "storage/low_speed.aac" 파일은 한국어 버전이 없습니다. 다른 분 게시글을 참조하시거나 하세요.
추천: 샤오미 블랙박스, 70Mai Pro 에 한국어 음성 적용하기 / 이런저런 블로그

70maiPro_NaverClova_Voice_v2.zip
0.62MB

이전 첨부파일(v1)의 스크립트에서는, 파일 복사를 마친 후 스크립트 자신은 지우지 못하는 문제가 있었습니다.

첨부된 파일에는 "voiceplay" 폴더, 그리고 두 개 "sh" 확장자의 파일이 있습니다.

먼저, 블랙박스의 SD카드를 PC에 연결하시고,
음성파일이 들어있는 "voiceplay" 폴더를 블랙박스의 SD카드에 넣으세요.

다음으로, "sh" 확장자의 스크립트 파일은 역시 4PDA 포럼에서 불펌한 것인데요(v_max님),
4PDA/음성 파일 교체

기존 v1.0.7까지와 달리, v1.0.8에서 다국어 지원 기능이 추가되면서, 음성 파일이 기존 경로에서 다음 경로로 바뀌었습니다:

  • 기존: /liteos/voiceplay/
  • 변경: /liteos/voiceplay/english/

따라서 스크립트도 그에 맞게 가져가야 하기 때문에..

  • v1.0.7까지는: autorun_copy_voiceplay_107.sh 파일을
  • v1.0.8부터는: autorun_copy_voiceplay_108.sh 파일을
    블랙박스의 SD카드에 넣어주세요.

그러면 블랙박스의 SD카드에 "voiceplay" 폴더와 둘 중 하나 골라서 넣은 "sh" 파일이 들어있게 되겠습니다.

💡 부팅 후 자동으로 음성 파일을 복사하는 중 전원이 꺼지면 기기가 손상될 수 있으니, 블랙박스 배터리가 충분히 충전된 상태, 또는 USB 전원이 공급되는 상태에서 진행해보세요.

이제 준비된 SD카드를 다시 블랙박스에 넣고, 전원을 켜면 별다른 메시지는 뜨지 않지만

  • 알아서 "voiceplay" 폴더의 파일이 블랙박스 시스템 공간으로 복사되고 나서,
  • 방금 전 SD카드에 넣은 위 파일은, 할 일을 다했으니 용량 절감을 위해 알아서 삭제됩니다

이 작업은 순식간에 진행이 되고요, 새 버전 (커스텀) 펌웨어를 설치하실 때마다 해 주시면 되겠습니다.

이런 고생 하지 않게 얼른 한국 정발이 되어야할 텐데요. 물론 국내 제품들이 현재 가격대에서 화질이 크게 개선되는 게 제일 좋고요.

💡 펌웨어 업그레이드하는 김에 음성 파일 교체도 한 번에 되도록, 새 펌웨어 파일과 위의 음성 교체 파일을 한꺼번에 넣을 수도 있겠습니다.

그러나 저는 권장하지 않는데요, 준비된 SD카드를 기기에 꽂고 펌웨어 업그레이드 버튼 조합을 누르기 실패할 경우 정상 부팅이 되어 사용중인 기존 펌웨어에 "음성파일 교체 작업"을 하는 헛짓이 될 수 있기 때문입니다.

한방에 업그레이드 + 음성 파일 교체를 하시려면 펌웨어 파일, 음성 교체 파일을 한꺼번에 넣어주시되..., 업그레이드 버튼 조합을 잘 눌러주세요!

  1. 내가최고야 2020.04.04 03:49

    안녕하세요~ 선생님 글 잘보고있습니다.
    이번에 구매해서 한국음성 한번 적용해보려고하는데

    말씀하신 voiceplay 와 .sh 파일을 루트에 넣고 재부팅해도
    계속 파일은 남아있고 그대로인데 방법이 잘못된것일까요?

    • Favicon of https://blog.limerainne.win limerainne 2020.04.05 10:32 신고

      순정이신가요? 셸스크립트 실행을 지원하는 커스텀 펌웨어여야 합니다. 글 다시 보니.. 그 점 명시가 안 되었네요.
      펌웨어 버전에 맞는 스크립트 쓰는 것도 챙겨주세요!

      본문에 써있는대로 원본 스크립트 거의 그대로 가져왔고, 제 기기에서도 잘 되었어서 커스텀 펌웨어 여부 빼고는 왜 안 될지 모르겠네요.. 😅

리소스 오버레이 프로젝트 폴더 준비: AndroidManifest.xml 파일, res 폴더

안드로이드 스튜디오 프로젝트로 만드는 분들도 있던데, 저는 잘 몰라서 손수 해 보겠습니다.
잘 찾아보면 괜찮은 템플릿 많이 있는 것 같아요. 요런 것도 있고요

프로젝트 폴더로 삼을 폴더 하나를 만들고, 그 안에 아래와 같은 파일 및 폴더를 만드세요.

(1) AndroidManifest.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="28" android:compileSdkVersionCodename="9" package="<오버레이 패키지명>">
    <overlay android:priority="<우선순위>" android:targetPackage="<대상 패키지명>"/>
    <application android:allowBackup="false" android:hasCode="false"/>
</manifest>
  • <오버레이 패키지명>
    리소스 오버레이 패키지의 이름을 적당히 지어주시면 됩니다.
  • <대상 패키지명>
    리소스를 수정하려는 대상 앱의 패키지 이름을 적으세요.
  • <우선순위>
    양수 자연수 숫자 값이고요, 같은 대상 패키지에 대해 오버레이가 여러 개 있을 때... 낮은 우선순위 값을 지닌 오버레이가 나중에 적용됩니다. 최후의 승자가 되는 셈이죠.
    예를 들어, 쓰고 있는 오버레이의 우선순위가 9인데, 같은 앱을 대상으로 하는 내 오버레이가 꼭 적용되어야 한다면 우선순위를 9보다 작은 8 또는 그 이하 값으로 주면 되겠죠.

(2) res 폴더
요기다 수정하려는 리소스를 넣어두게 됩니다. 하위 폴더 구조는 일반적인 안드로이드 앱 리소스와 같으니 안드로이드 문서, 또는 수정 대상과 똑같이 해 두세요. 아래에서 이어집니다.

수정할 리소스 만들어 넣기

💡 리소스 폴더명 뒤에 옵션이 붙을 수 있습니다:

  • 화면 밀도 (xhdpi, xxhdpi, ...), 회전 여부 (land), API 버전 (v21), 야간 모드 (dark), 언어 (ko) 등등

✔ 각각 다 고쳐주셔야 합니다!

  • 덮어쓰려는 리소스 파일과 같은 경로, 같은 파일 이름으로 만드세요.

해본 것 위주로 예시를 적어보겠습니다.

숫자, 문자열 값 /res/values/...

원본과 같은 이름의 폴더에 같은 이름의 파일을 만들고 (e.g. dimens.xml), 파일 내용으로는 덮어쓰려는 키-값 쌍만 나열해 주세요. 원래 파일의 키-값 전체를 반복해서 쓸 필요 없습니다. 파일 내용으로 예를 들면 이렇습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="operator_text_font_size">0.0dip</dimen>
    <dimen name="operator_text_kt_image_width">0.0dip</dimen>
    <!-- 몇 개 더 덮어썼지만 생략합니다. -->
</resources>

위험도: 낮음 ✅
다른 곳에서 정의된 ID를 참조하는 형태가 아니므로 _없는 ID 참조 예외_가 발생할 일 없으며, 어지간히 잘못된 값을 주지 않는 한 앱 오류를 발생시킬 가능성도 낮으므로 그럭저럭 실수해도 안전하다 하겠습니다.

그림 리소스: /res/drawable/... 또는 /res/mipmap/...

drawable 폴더에 바로 그림이 있을수도 있고, drawable 폴더에는 상황별 리소스를 참조하는 XML 파일이 있고 mipmap에 실제 그림 리소스가 있을 수 있습니다. XML 파일을 고치는 것은 위험하다고 생각되니, 대신 이미지 파일을 수정해보세요.

e.g. /res/drawables-xxxhdpi-v4/stat_sys_operator_kt.png 파일을 투명 파일로 교체, xxxhdpi 대신 xxhdpi, xhdpi 폴더의 그림도 마찬가지.

💡 화면 밀도, 회전 여부 등 폴더명 베리에이션을 잊지 마세요.

위험도: (그림 자체) 낮음 ✅
다른 곳에서 정의된 ID를 참조하는 형태가 아니므로 _없는 ID 참조 예외_가 발생할 일 없으며, 그림이 비정상이 아닌 한 역시 안전하다 하겠습니다.
위험도: (XML 파일) ..? ❔
(안 해봤습니다. 다른 리소스명을 참조하게 되기 때문에 혹시나 새 버전에서 사라지면.. 오류를 일으킬 것 같습니다.)

스타일 /res/values/styles.xml

TODO 스타일 상속 받는 법을 잘 모르겠더라구요.. 그걸 제외하고는 앞과 비슷하게 (1) 같은 이름의 스타일을 적고, (2) 그 안에 덮어쓸 item 을 나열하세요.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TextAppearance.Material.Notification.Emphasis" parent="@*android:style/TextAppearance.Material.Notification.Emphasis">
        <item name="android:textColor">#66ffffff</item>
    </style>
</resources>

💡 정의된 다른 ID를 참조할 때는 아래와 같이 적으세요.
@*<패키지명>:<리소스 분류>/<리소스 ID>
오버레이 대상 패키지에 속한 ID를 참조할 때, 안드로이드 프레임워크 (위의 android) 안의 내장 ID를 참조할 때 모두 위와 같이 @* 기호와 함께 패키지명을 적어 주세요.
(왜 그래야 할까요... :()

위험도: 잘 모름
음... 참조 잘못하면 위험하겠죠.

레이아웃

한 발 나아가서 레이아웃도 굳이 고치려면 고칠 수 있습니다. 그런데 XML 파일에 다른 곳에서 정의된 ID를 참조하거나, 새 ID를 정의하는 내용이 들어갑니다. 앱 업데이트 후 있던 ID가 없어지거나 ID 이름이 바뀌었을 때, 레이아웃에서 또는 소스코드에서 엉뚱한 ID를 참조하려 하면 오류가 발생하겠습니다. 시스템 리소스를 수정한다면 오류 때문에 더 위험하겠죠?

  • 원본 레이아웃 파일을 오버레이 프로젝트 폴더로 복사해 오세요.

  • 파일을 열고, ID 참조 부분을 모두 수정해주세요.

    💡 오버레이 프로젝트에는 원래 앱 패키지에 정의된 ID가 없습니다. 그러니 ID 참조가 원래 패키지를 가리키도록 수정해 주어야 정상적으로 리소스 오버레이 프로젝트의 컴파일이 가능합니다.
    <리소스 분류>/<리소스 ID> => @*<패키지명>:<리소스 분류>/<리소스 ID>
    e.g. integers/awesome => com.lvlz8.lovelinus:integers/awesome

  • 이제 레이아웃 파일에 원하는 수정 사항을 적용하세요 e.g. 뷰 요소 자리 바꾸기, (TextView 등 안드로이드 기본) 뷰 추가하기, ...

위험도: 높음 ❗
잘못된, 없는 ID 참조 시 예외로 앱이 강제종료됩니다. 시스템UI라면 상황은 더 심각합니다. 삼성 기기는 안전 모드로 재부팅하면 리소스 오버레이가 해제되는 듯 한데, LG 기기는 그렇지도 않아서 어려움이 있습니다.

aapt 툴 통해 프로젝트를 APK 파일로 생성, 서명 후 기기에 잘 설치

수정할 리소스 준비를 모두 마쳤다면, 프로젝트 폴더에서 명령줄 창을 띄우고 aapt 도구로 APK 컴파일이 가능합니다. aapt는 안드로이드 SDK에 들어있는 패키징 도구입니다.

아래 명령은 Pie OS 기기를 (API 28) 목표로 하고, 시스템 요소 중 SystemUI.apk 파일을 대상으로 준비해 본 명령입니다.

aapt package -f -M AndroidManifest.xml --min-sdk-version 26 -S res -I <android-28.jar> -I <SystemUI.apk> -I <framework-res.apk> -I <제조사 리소스 경로> -F <APK 출력 경로>
  • 최소 SDK 버전을 26으로 두었는데요, 최소 버전이 낮으면 예전 권한 시스템이 필요한 것으로 잘못 인식해 불필요한 권한이 부여됩니다.
  • -M, -S 플래그로 각각 매니페스트 파일, 리소스 폴더를 지정했습니다.
  • -I 플래그를 연속으로 나열하여 안드로이드 API 파일 (SDK에서 떼어왔습니다), 수정 대상 앱 (SystemUI.apk), 그리고 안드로이드·제조사 프레임워크 리소스 파일을 지정했습니다. 이렇게 하면 컴파일 중 필요한 리소스를 모두 정상적으로 참조할 수 있습니다.
  • -F 플래그로 APK 출력 경로를 적었습니다.
  • 뭔가 덜 한 것 같기는 하지만 여러분이 완성시켜주세요.

컴파일된 APK 파일을 테스트 인증서 또는 여러분의 인증서로 서명하면 준비 끝.

준비된 리소스 오버레이 파일을 모아... 아래와 같이 설치해볼 수 있겠네요.

  • 오레오 OS라면 그냥 설치?
  • Substratum 같은 리소스 오버레이 매니저를 쓰시거나
  • 루팅해서 설치하거나...
  • LG, 삼성 기기면 직접 테마로 만들든 툴을 쓰든 해서

...여기까지 해서 비록 Pie 버전에서는 설치가 막혔지만, 시스템 리소스 또는 사용자 앱 리소스를 수정해볼 수 있는 안드로이드 OS 내장 도구인 리소스 오버레이를 알아봤습니다.
읽으시느라 고생하셨습니다!

분석 결과 예시

LG 휴대폰 오레오/파이 OS에서 상태바 통신사 문구 및 VoLTE 로고 숨기기를 위해 찾아본 리소스 목록을 예시로 들어 보겠습니다.

굿락으로 챙겨주는 갤럭시 부럽다..

무슨 파일을 덮어써야 할까...

상태바 리소스이니 다음 파일을 찾아봅시다.

  • SystemUI.apk를 먼저 찾아보고,
  • 공통 리소스를 담는 framework-res.apk
  • 그리고 제조사 공통 리소소를 담는 lge-res.apk (삼성 폰도 비슷한 거 있음) 파일을 열심히 뒤져봐야겠습니다.

SystemUI.apk에 있는 상태바 관련 레이아웃 파일이나 소스코드를 참고해서 관련 리소스 이름을 알아내는 것도 좋습니다.

문구 표출 형태, 그리고 관련 리소스 찾기

리소스 디렉토리 구조 및 이름 짓는 법을 알고 계시면 편합니다. 이 부분은 공식 문서 포함해서 좋은 글 많으니 직접 찾아보시고요, 여기서는 실제 예시를 들어보겠습니다.

❌ 레이아웃(layout) 등 다른 ID를 참조하는 코드가 포함된 리소스는 수정하기 어렵습니다. 자세한 내용은 나중에..

  • 🧀 아이콘: KT, LGU+, 그리고 VoLTE 로고
    그림 형태이니까, 1px * 1px 크기 투명한 PNG 파일로 바꿔치기하면 되겠습니다.

수정 대상은 drawable 리소스 자체일 수 있고, drawable 리소스는 여러 mipmap 요소를 상황에 따라 사용하도록 하는 XML 파일이며 실제 이미지는 mipmap일 수 있습니다. 후자의 경우는 실제 그림 리소스인 mipmap을 고치는 게 좋겠습니다.

SystemUI.apk에만 있으면 좋았을텐데, lge-res.apk에도 VoLTE 로고를 포함해서 몇 개 있었습니다. 싹다 바꿔주면 되겠고요.
DPI 별로 베리에이션이 있으니 (xhdpi, xxhdpi, xxxhdpi 등) 모든 베리에이션에 대해 역시 싹다 바꿔줍니다.

  • 🅰 문구: SKT
    그냥 T로고가 예쁜데..

이 경우는 문구에 해당하는 폰트 크기를 0으로 만드는 방법이 먹혔습니다. 아래와 같은 방법으로 수정 대상 값을 찾을 수 있는데요.

  • res/values/dimens.xml 파일의 dimen(sion) 값 중 적절해보이는 이름을 찾을 수 있고, (머리가 귀찮으면 몸이 고생)
  • 상태바 관련 레이아웃에서 통신사 문구를 나타내는 요소를 찾아 확인할 수 있습니다.
    • 폰트 크기 속성이 직접 지정되어 있으면 그 값을 봅니다.
      res/layout/status_bar.xml:
      <TextView ... android:textSize="@dimen/operator_text_font_size" />
      <TextView ... android:textSize="12sp" /> <!-- 단, 이렇게 값이 직접 씌어있다면 수정하기 난감합니다. -->
    • (폰트 크기 속성을 포함하는) 스타일을 지정한 경우, res/values/styles.xml을 확인해야 합니다.
      <!-- res/layout/status_bar.xml: -->
      <TextView ... android:textAppearance="@style/TextAppearance.StatusBar.Clock" />
      <!-- res/values/styles.xml: -->
      <style android:name="TextAppearance.StatusBar.Clock">
      ...
      <item name="android:textSize">10sp</item>  <!-- 값으로 직접 지정되어 있으면 styles.xml을 고치면 되고 -->
      <item name="android:textSize">@dimen/clock_text_font_size</item> <!-- 또다른 값을 참조하면 해당 값을 고쳐줍니다 -->
      ...
      </style>
      • 레이아웃 대신 소스코드에서 뷰 요소의 폰트 크기를 지정할 수도 있겠죠. 이 경우는 잘... 확인하시면 되겠습니다.

다행히 폰트 크기가 레이아웃에 하드코딩되어있지 않으며 dimen 값을 참조하게 되어 있었고, 해당하는 값은 다른 상태바 요소와 공유되지 않는 별도 값이었습니다. (통신사 문구 폰트 크기를 0으로 만들었더니 시계 문구도 안 보이면 난감하니까요.)

 

샤오미(산하 브랜드?)에서 만든 블랙박스 70mai Pro는 저렴한 가격에 고화질 영상을 자랑하는 가성비 블랙박스입니다. 국내 제품에서는 고가 제품에만 들어가는 고급 이미지 센서를 7만원짜리 저가형 제품에서 누릴 수 있는 것이 큰 장점입니다.

70mai pro


(이미지 출처: 다나와)

제가 쓸 건 아니고 아버지 가끔 운행하시는 차량에 들어갈 거지만 대충 본 소감을 말씀드려 봅니다.
국내 쇼핑몰에서 본체 구입, 알리익스프레스..에서 GPS 모듈 및 퓨즈박스 연결용 시거잭 소켓 케이블을 구입해서 전면에 장착했습니다.

장점

  • QHD + H.265 녹화
    주간에 촬영되는 영상 선예도는 참 좋습니다. 쓱 보기에 중심부 뿐 아니라 주변부 선명도도 괜찮아 보입니다. 게다가 H.265 코덱을 지원하니 미지원 기기 대비 비디오 파일 용량이 줄어들겠다는 기대도 듭니다 (확인 안 해봄..). 영상을 PC에서 확인하지 않고 폰에서만 확인했기 때문에 화질이 어떠한지 자세한 평가를 내리지는 못하겠네요.

  • 까리한 디자인
    다들 인정하시리라 봅니다. 하지만 다른 회사 디자인 카피..

    예시: 아이나비 FXD900 (2013) 존똑

    아이나비 FXD900 (2013)
  • 전원 넣으면 2초만에 켜짐
    빠른 부팅은 사랑입니다. 내장 배터리의 위엄인지 모르겠네요.

  • 없는 것보다는 나은 ADAS 기능: 앞차 출발 알림, 차선 변경 알림
    GPS 모듈을 연결하고, ADAS 기능을 켜고 나서 차량을 운행하면 몇 분간 보정 작업을 진행한 후 사용할 수 있습니다.
    - 차선 변경 알림은 일정 속도 이상 (수정: 80km/h 이상) 고속 주행 시에 동작하도록 되어 있다더군요. 그래서 동작하는 모습을 못 봤습니다.
    - 앞차 출발 알림은 나름 잘 되는 것 같습니다. 음성으로 알려주는데, 음성 대신 적절한 알림음이면 좋겠네요.
      (오토바이는 차량으로 인식하지 못했습니다.)
    - 앞차 거리 경고 알림도 가끔 됩니다. 이걸 들을 일이 없는 게 제일 좋죠.

아쉬운 점

  • 중국 제품임..
    사드 보복이라던지 대북 외교에 도움 안 주는 점(후자는 아무튼 중국이 북한 편이니 어쩔 수 없기는 하겠는데)을 생각하면.., 중국 제품 구매를 주저하게 되는 면이 있습니다. 하지만 샀죠... 유구무언이네요.

  • 2채널 맞추려면 국내 제품 대비 가성비 이득 하락
    앞뒤로 2개 달려면 배선, 전력 소모 문제도 있지만, 2개면 7만원*2에 액세서리 하면 국내 제품 대비 그렇게 값싸지 않게 됩니다.

  • 야간 모드 엉망, 반사광 방지가 잘 안 되어 있음
    야간 화질은 별로라서 외국 포럼을 보시면 이를 해결하기 위해 여러 노력들을 하고 계시더군요. 또한 국내 제품에는 되어있는 렌즈 반사광 방지 처리가 안 되어 있어서 주간 화질이 저하되는 문제가 있습니다.
    주간 화질 이야기를 한 김에 적어보면, "WDR" 모드는 중국어 펌웨어에서만 적용된다고 합니다.

  • 기기 언어 한국어 미지원, 앱은 한국어 지원
    앱은 한국어가 되니 괜찮지만, 기기 화면 언어는 국제 펌웨어는 영어, 중국 펌웨어는 중국어로 고정이라 불편한 점이 있습니다. 음성 언어도 그렇고요. (이거 말고 신기종에는 어설픈 한국어 음성 안내가 들어간대요.)

  • 충격 감지 기준이 뭔가 이상
    1.0.5 때는 "낮음"이 민감, "높음"이 둔감으로 잘못되어 있었다더군요. 1.0.6부터 수정이 되었다던데... 테스트할 때는 괜찮았는데, 장착한 후로는 충격 감지가 잘 안 되는 것 같아 이상합니다. TODO

  • GPS 모듈로 ADAS밖에 못 함, 시간 자동 설정은 휴대폰 연결 통해서만 가능, 영상에 위치 정보 기록은 되는 듯 함
    ADAS 외에는 GPS 모듈이 별 쓸모가 없습니다. 그나마 국제판 펌웨어에서는 위치 기록이 되기는 된다더군요.
    - 다른 블로거님들 글을 보시면 펌웨어에 따라 화면에 GPS 좌표·속도를 띄워주더군요. 단, 영상 자체에 기록되는 것은 아닙니다.
    - 러시아제 커스텀 펌웨어를 쓰시면, 위치 정보를 SRT 자막 파일로 (동영상 플레이어에서 함께 볼 수 있게), 그리고 지도 프로그램에서 읽는 KML,GPX 포맷으로도 저장해준대요.

  • 주차 모드
    기본적으로는 기기 내장 배터리를 이용해서 전원 차단 후 일정 시간 (20분 등) 녹화가 가능합니다.
    별도 상시 케이블 (2만원 내외..) 장착시 사용할 수 있는 "타임 랩스" 모드는 중국어 펌웨에서만 동작한다더라구요. 응, 포기. 상시 케이블 따로 구입한다면 가성비가 없어지는 또다른 문제도 있습니다. 그럴거면 국내 제품 샀죠.

  • 로고 못 지움
    v1.0.6 버전부터 녹화 영상에서 로고를 숨길 수 있게 되었습니다. 휴대폰 앱에서 설정하면 돼요.
  • 30프레임만 지원, 60프레임 녹화까지 되면 좋을텐데...
    60프레임은 사랑인데 아쉽습니다. 7만원짜리니까 그러려니 해야겠죠. 다음 세대 제품에서는 개선될 것 같습니다.

참고사항

  • "event_s" 처럼 "_s" 달린 폴더가 생기고 안 달린 폴더와 용량은 작되 같은 내용의 파일이 생긴다는데요.
    휴대폰 앱에서 미리보기할 때 작은 용량으로 빨리빨리 다운받아서 미리보기하라고 만들어두는 거라고 합니다. 다만 이러한 미리보기 파일 만들기 기능을 끌 순 없는 것 같네요.
  • 다른 블로거님에 의하면, 주차모드 시 차단 전압이 좀 낮게 설정되어 있다고 합니다. 잘못하면 차량 배터리 방전 각이죠.
    ( 4pda.ru 포럼 유저에 의하면 차단 전압은 11.7V )

총평

번호판 식별 성능은 모르겠지만 아무튼 가격 대비 뛰어난 화질로 승부하는 블랙박스입니다. 관리에 손이 가고(새 펌웨어 찾으러 다녀야 함, 액세서리 구입이 쉽지 않음) 부가기능이 중요하다면 국내 제품 사는 것이 나으나, 가격과 좋은 화질이 모든 것을 용서합니다.

* 번거로운 작업 없이도 SD카드에 파일을 넣기만 하면 되는 아래 방법을 대신 사용해보세요:
https://limerainne.tistory.com/56

샤오미(산하 브랜드?)에서 만든 블랙박스 70mai Pro는 저렴한 가격에 고화질 영상을 자랑하는 가성비 블랙박스입니다. 국내 제품에서는 고가 제품에만 들어가는 고급 이미지 센서를(소니 IMX335) 7만원짜리 저가형 제품에서 누릴 수 있는 것이 큰 장점입니다.

70mai pro

(이미지 출처: 다나와 상품정보)

러시아산 커스텀 펌웨어: 시스템 파일, 즉 안내 음성 파일 수정 가능

여기에 러시아 형누님들의 SSH 지원 커스텀 펌웨어를 설치하면, 보안성이 조금 더 떨어지는 대신 (러시아 형누님들이 무슨 일을 했을 지..), SSH 연결을 통해 시스템 파일 접근 및 수정이 가능합니다. 그러면.. 안내 음성 파일 교체도 할 수 있죠!

4pda 포럼 70mai Pro 게시글에 가시면 최신 커스텀 펌웨어를 찾을 수 있습니다.

네이버 클로바: 매우 자연스러운 음성 합성 서비스

클로바 보이스 체험 페이지에 가시면 딥러닝 기술로 만든 음성 합성 기능을 체험해 볼 수 있습니다. 게다가 개인 콘텐츠 제작 목적에 한하여 무료 사용이 가능하다고 하네요! (*추가: "출처(Clova Voice)를 명시"하시라는군요..)

그렇다면?

네이버 클로바로 만든 70mai Pro 한국어 안내 음성

  • 위 포럼 링크에서 러시아 형누님들이 준비한 음성 파일 및 대본 엑셀 파일을 받았습니다.
  • 열심히 번역하고, 네이버 클로바 음성합성 데모 페이지에서 손수 하나하나 음성 WAV 파일을 받았습니다. 스크립트 만들면 편했겠지만, 몇 개 없으니..
  • 적절한 형식의 AAC 파일이 필요하므로 음악 파일 변환기로 WAV를 AAC로 바꿔줍니다.

70mai_NaverAraVoice.zip
2.90MB

해서 한국어 안내 음성 파일을 준비했습니다. 이제 기기의 음성 파일을 교체하기 위해 역시 러시아 포럼의 가이드 글을 따랐습니다:

  • SSH 연결을 지원하는 커스텀 펌웨어를 설치한 블랙박스 기기를 준비합니다.
    • 저는 v1.0.6na 버전을 설치했는데, 지금 보니 1.0.7 버전이 공개되어 있네요. 1.0.8 버전도 나왔대요.
  • 기기와 안드로이드 폰을 와이파이로 연결한 뒤 (70mai 앱 통해 연결), "AndFTP" 앱으로 기기에 SCP 접속했습니다.
    • SFTP가 아니라 SCP라 위 가이드에 있던 AndFTP 외에 마땅한 앱을 모르겠더라고요.
    • 러시아산 SSH 펌웨어 기본 계정은 "root", 비밀번호는 없음.
  • 루트 디렉토리로 올라가서 "/liteos/voiceplay/" 디렉토리로 들어가세요. 상황별 디렉토리(adas, record, storage, system) 밑에 음성 파일들이 있습니다. 요걸 한국어 음성 파일로 교체하면 끝!
    • 펌웨어 버전 v1.0.8부터는 다국어 지원 기능이 추가되면서 (일본어 추가됐다던데 일본 진출하나봅니다. 한국은?) 이제부터는 "/liteos/voiceplay/english/"로 들어가셔야 합니다.

위와 같은 안드로이드폰(또는 PC) 및 번거로운 작업이 싫으신 분은 아래 글을 참고해보세요:
샤오미 70mai Pro 한국어 안내 음성 with 네이버 클로바 보이스 #2

문제점
버전 차이인지 다른 음성 디렉토리가 또 있는지, 대본 파일에 있던 일부 음성 항목은 1.0.6버전 기기에 없었습니다. 총 17개 항목이 없었는데, "음성 녹음" 상태 안내 빼고는 펌웨어 업데이트 등 주요 기능에는 무관한 종류라 뭐 일단은 괜찮은 것 같습니다.

UI 언어 교체, 즉 화면 문구를 한국어로 바꾸는 일, 그리고 음성 인식 언어 교체 모두 현재는 불가합니다.
- UI 언어 교체는 얼마 전에 4pda 포럼 글을 살펴 보니 변경 시도가 이루어지는 것 같아요.
- 음성 인식 언어는.. 아직까지는 개인이 만들기는 어렵고 정식 발매되어 한국어 지원도 정식으로 되기를 기다려 봐야겠습니다.

참고

음성 소스가 "네이버 클로바"임을 꼭 명시하시기 바랍니다.

변환 설정

  • Pazera Free Audio Extractor
  • AAC, 48000Hz 샘플레이트, 모노 채널, CBR 비트레이트, AAC-LC 프로필, 그리고 64kbps 비트레이트

 

 

  1. 2020.01.02 15:41

    비밀댓글입니다

    • Favicon of https://blog.limerainne.win limerainne 2020.01.03 14:20 신고

      제가 착각을 했네요. "/liteos/voiceplay" 경로이군요. 아래 링크한 가이드를 참고하세요. (구글 번역기 같은 것 쓰십시오.)

      https://4pda.ru/forum/index.php?s=&showtopic=916938&view=findpost&p=81805148

  2. 후투밤 2020.03.11 14:39

    좋은 자료 감사합니다 ㅎㅎ
    음성으로 사진촬영하거나 동영상 녹화하는건 기존대로 영어로 명령해야하는거죠?

    • 후투밤 2020.03.11 14:42

      아이폰으론 작업이 안될까요?

    • Favicon of https://blog.limerainne.win limerainne 2020.03.12 12:38 신고

      네, 음성 인식 모델은 고치지 못했습니다. 4PDA나 다른 포럼에서도 아직까지는 못 고치던 것 같네요.

      제가 아이폰이 없어서 어떤 앱 쓸 수 있는지 잘 모르겠습니다.
      * PC로 작업하신 분도 계신 것 같으니 참고해보실 수 있겠고요. (잘 모르겠지만, PC/노트북 와이파이로 블랙박스에 연결 후 WinSCP 같은 프로그램으로 접속하나 봅니다.)
      * 아예, 커스텀롬 기능 중 하나인 시작 시 셸스크립트 실행해주는 기능을 이용해서 자동으로 바꿔치기하면 좋겠는데.. 제가 쓰려고 산 기기가 아니라서 바로바로 테스트를 못 하겠네요.

    • Favicon of https://blog.limerainne.win limerainne 2020.03.22 00:26 신고

      안드로이드폰 없이 스크립트 파일을 넣어서 교체하는 방법이 있어 가져와 소개했습니다. 참고해보세요.
      https://limerainne.tistory.com/56

  3. Favicon of https://sihloh4me.tistory.com 넌지시 2020.04.02 10:09 신고

    감사합니다. 잘 보고 공감,구독까지 했습니다.
    능력자분이세요. 혹시요. 두번째 버튼 누르면 수동녹화기능 있던데요. 그걸누르면 10초전영상부터 저장되도록 하는 기능 수정도 가능할까요? 꼭 필요한 기능인데...지원이 안되는것 같습니다. 그냥 수동녹화버튼 누르면 그 시점부터 녹화되는 단순녹화 기능만 지원되더라구요. 순정은...
    지원가능하다면 커펌으로 갈아타고 싶습니다.

    • Favicon of https://blog.limerainne.win limerainne 2020.04.02 19:25 신고

      필요한 기능인 건 확실한데요, 잘 모르겠습니다. 해당 기능 추가는 제조사에서 할 수 있을 것 같습니다.
      검색해보시면 공식 포럼에 관련 기능을 요청한 글이 두어 건 보이는데요, 관심이 없는지 제조사 댓글이 안 달려있기는 했습니다.

      제가 잘 몰라서 쓰는데요, 버튼 누르는 대신 블박을 쿵 쳐서 강제로 이벤트 녹화를 만들면 어떤가요? 러시아 포럼글 검색해보니까 충격 발생 30초 전 영상부터 이벤트 녹화로 처리한다는 말이 있던데 사실인지 모르겠네요.

    • Favicon of https://sihloh4me.tistory.com 넌지시 2020.04.02 19:29 신고

      그렇군요. 확인감사합니다. 전 펌웨어 bin파일을 불러와서 수정하는 툴이 있을까 해서요..ㅜㅜ 충격으로이벤트 녹화하는 것은 저두 생각해 봤는데. ..누적되면 지워지기 때문에 안될꺼 같더라구요. 답변감사드립니다.

    • Favicon of https://blog.limerainne.win limerainne 2020.04.02 21:47 신고

      bin 파일 말씀하시는 정도면 잘 알고 계시는 것 같네요... 직접 만들어보시면..?
      설정파일 편집기는 있던데 없는 기능을 만들지는 못할 것 같고요.

      버튼 녹화, 충격 녹화 모두 event 폴더에 들어가니 제한 개수 넘기면 지워지는 건 같다고 생각합니다.

지난 MS 10월 이벤트에서, 서피스 프로를 또 사골 고으면서 ARM 윈도 탑재 "서피스 프로 X"에 큰 힘을 실었는데요.

프로 X 리뷰를 보면 역시나 x86 에뮬레이션 성능은 여전히 제자리걸음입니다. 이제 쓰려는 글과는 무관하지만 심지어 대기시간도 ARM 답지 않게 짧고요. 이래놓고 가격은 아이패드 프로 급입니다. 이러려고 서피스 프로 사골 고았습니까악?

현재 ARM 윈도의 한계점은:

  • ARM CPU용으로 개발된 윈도 프로그램이 별로 없습니다
    • ARM용 (크로미움) 엣지, 파이어폭스 나이틀리, MS오피스 정도가 메이저(뇌피셜)인 것 같아요
    • ARM용 프로그램이 대세가 되면 에뮬레이션 당연히 필요없겠죠. 그치만... 그 날은 아직...
  • x64 (AMD64) 에뮬레이션이 안 됩니다, 즉 64비트용 프로그램 안 돌아갑니다
  • x86용 벤치마크 성능이 바닥을 기는 것을 볼 때, SSE2 같은 SIMD 명령 지원을 안 하는 것 같습니다 (이것도 뇌피셜)
  • 그나마 그냥 x86 프로그램도 호환성을 탄다고 합니다

이래놓고 본품 $999에 펜+키보드 별매라니 서피스 수장님 정신 차리십시오

 

한편 AMD64 특허 만료가 2019년 기준으로 이제 2년 정도 남았다는데요,

1차: https://gigglehd.com/gg/soft/6031493

2차: https://www.neowin.net/news/exclusive-microsoft-is-working-to-bring-64-bit-intel-app-emulation-to-windows-on-arm

내년 윈도10 업데이트에서 x64 에뮬레이션 기능이 추가된다고 하네요! 특허를 어떻게 피한거죠? AMD에서 기껏 라이젠 띄워놓고 ARM CPU 팔려고 지원해주는걸까요 ㄷㄷ

x64 지원된다고 해서 프로그램 성능이 올라가지는 않을 것 같지만, 이제는 x86/64보다 ARM 윈도가 빛나는 미래가 될테니 기대가 되......지 않네요. ARM윈도 부흥의 그 날은.. 아직 퀄컴이 열일하고 (삼성은 데스크탑용 ARM칩 안 할지?), MS도 열일하고... 최소 2년은 있어야...

저는 서피스 프로 + 베젤 축소 + 썬더볼트 3가 좋습니다. 프로X 말고 이거... 왜...

포알못이 적습니다. 포덕님들이시던 아니시던 뒤로가기 하십시오.

 

이름이 유치함

"소드", "실드"라니!

그러나 기존 이름도 단순했죠. 이름 불만은 게임 품질이 나빠서 곁가지로 트집잡히는 것으로 보여요.

포켓몬 전국도감 절반 가까이 삭제

쓰레기들... 캐릭터 모델링 재탕한 놈들이... 이건 누구도 실드 못 칩니다.

라이트 유저 사랑

원래 "진입은 쉽게, 마스터는 어렵게" 만든 게임이 잘 만든 게임이라던데요. 아무리 그렇더래도 전반적 난이도가 너무 낮아졌다는 평이 있습니다.

그래픽, 게임 시스템 뭉뚱그려서 의견

  • 기존 시리즈에서 불편했던 요소를 많이 고쳤대요
    • 어디서나 포켓몬 박스 접근
    • 학습기 삭제, 항상 6마리 전부 경험치 획득
    • ...
  • 허술한 캐릭터 공격 모션 이야기가 많았는데, 중후반 주요 캐릭터 공격 모션은 힘 줘서 만들었대요.
  • 축구 경기 느낌을 낸 체육관 배틀 평이 좋고요.

 

  • 20년 전 젤다 느낌 나무 텍스쳐 품질은 다들 아실 겁니다.
  • 주인공 캐릭터 커스터마이징이 되긴 되네요. 얼굴형 바꾸는 건 전혀 바라지 않고, 피부색, 머리모양, 눈코입 조절되면 됐죠 뭐. 주인공 말고 포켓몬 커스터마이징이 되어야 하는 것 아닌지.
  • 대놓고 라이트 유저 타겟이라는 렛츠고 시리즈보다도 못한 배틀 화면 배경.

    • 다리 위에서 싸움 붙으면 다리 배경 그대로 보여줬던 전작과 달리 풀숲으로 워프하는 이번 시리즈. 이유가 뭡니까.

  • 건물은 죄다 장식, 진입 불가 또는 텅 비어있거나

결론

제작진의 무성의함이 온 몸으로 느껴지지만, 그래도 재미는 충분한가보네요 :(

개선된 점이 많이 있다고 하고, 정석 스토리로 돌아갔다는 점도 뭐 좋습니다.

 

최근 불만이었던 시리즈를 생각해 보면,

  1. XY 시리즈 게임 시스템은 개선되었으나 뭔가 이상했고
  2. 썬문 시리즈 릴리에 위주로 진행하여 스토리 말아먹었으나 잘 팔렸다고 하고
  3. 라이트 유저층 타겟한 렛츠고 시리즈 대박나고, 포켓몬Go 계속 잘나가고 있어서

부자는 망해도 삼대는 간다고 하고, 이번이 썬문 이후로 병맛 퀄리티 2대째인데... 전혀 망할 것 같아보이지 않습니다. 잘 팔리니 프로듀서들이 딱히 반성할 것 같지도 않고요.

그래서 팬들이 바라는 고퀄리티는 다음 버전에도 기대하기 어려울 것 같아요. 어서 탈출하시던지, 그냥 포기하고 즐기세요.

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