지난 글 "LG폰 폰트 패키지 직접 만들기는 잘 안 됨"에 이어서,

그동안 LG폰에 사용자 폰트를 넣으려는 시도는 다들 폰트 정보 파일의 벽을 넘기가 어려웠습니다. 물론 별로 관심없는 쪽이 가깝긴 한 것 같지요. 스토어의 유/무료 폰트 패키지에서 폰트 파일을 열어서 글리프만 바꿔치기하는 수법이 있었으나 번거로웠죠.

그런데 요새 오픈소스 분석도구가 워낙 좋아서 실력없는 목수인 저도 노오력하면 분석이 가능했네요.
(포맷 분석 결과로부터,) 공개 폰트로 만든 폰트 패키지를 올려드려봅니다. 한 번 써보세요!

※ 폰트별로 링크된 APK 파일을 휴대폰에서 다운로드 및 설치 후, 휴대폰 폰트 설정에서 고르세요.

1. 리디바탕체
전자책 서점사 리디북스에서 만든 "리디바탕체" 사용자 폰트입니다.
보기 좋고 읽기 좋은 바탕체 글꼴이 자랑입니다.

※ 원래 버전은 가늘다고 느껴서 FontForge로 조금 굵게 고친 버전입니다.

RidiBatang_LGFont.apk
1.20MB

※ 폰트 배포처 링크: https://www.ridicorp.com/branding/fonts/ridibatang/

리디바탕 글꼴은 개인 및 기업 사용자를 포함한 모든 사용자에게 무료로 제공되며 자유롭게 수정하고 재배포하실 수 있습니다. 단, 글꼴 자체를 유료로 판매하는 것은 금지하며, 리디바탕 글꼴은 본 저작권 안내와 라이선스 전문을 포함해서 다른 소프트웨어와 번들하거나 재배포 또는 판매가 가능합니다. 라이선스 전문을 포함하기 어려울 경우, 리디바탕 글꼴의 출처 표기를 권장합니다. 예) 이 페이지는 리디주식회사에서 제공한 리디바탕 글꼴이 사용되어 있습니다.

This Font Software is licensed under the SIL Open Font License, Version 1.1.
리디바탕의 저작권은 리디주식회사가 소유하고 있습니다.

 

2. Neo둥근모 (v1.41 (19.12.19))

Neo둥근모는 90년대에 퍼블릭 도메인으로 공개된 비트맵 한글 글꼴 둥근모꼴을 트루타입 형식으로 변환하고, 여기에 원래 글꼴에는 없던 여러가지 기호를 추가함으로써 여러 환경에서 유용하게 쓰일 수 있는 글꼴을 만드는 프로젝트입니다.

NeoDGM_v1.41_LGFont.apk
0.14MB

※ 폰트 배포처 링크: https://dalgona.github.io/neodgm

Neo둥근모는 SIL Open Font License 1.1 하에 배포됩니다. 라이선스의 전체 내용은 GitHub에서 보실 수 있습니다.

 

  1. ㅠㅠ 2020.05.04 20:54

    삼성폰에서는 사용이 안되는군요 ㅠㅠ 아쉽습니다...

    • Favicon of https://blog.limerainne.win limerainne 2020.05.04 23:35 신고

      삼성폰은 방식이 완전히 다릅니다!
      파이 OS까지는 Wings 폰트 툴을 이용하면 가능했지만, 10부터는 구글의 정책 변경으로 뒷문이 완전히 막혔습니다.
      그래도 언젠가는 방법이 또 나오겠죠?

이전 글에 이어서,

(추가) 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 신고

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

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

  2. 내가최고야 2020.04.07 02:38

    감사합니다~ 1.0.8 ssh 커스텀펌웨어가 아닌 욕심으로 새로나온 1.0.9를 설치한게 잘못된것이었네요 ㅠ.ㅠ

    헌데 주행녹화시 센서감도를 최고로해도 주행중에 충격이 있어도 이벤트녹화로 절대 안들어가고
    그냥 계속 상시녹화일 뿐이네요 ㅠ.ㅠ

    전용상시케이블을 꼭 써야하는건지...ㅠ.ㅠ

    • Favicon of https://blog.limerainne.win limerainne 2020.04.07 16:08 신고

      1.0.9 버전이 나왔군요 ㄷㄷ

      주행중 충격 이벤트 녹화는 본문과 무관한 이야기인 것 같고, 상시·주차케이블과는 당연히 무관할겁니다.
      애초에 센서가 둔한 건 어쩔 수 없겠고요... 안정적인 동작이 필요하다면 국내제품을 사야겠죠.
      감도를 오히려 낮음으로 설정해보시는 건 어떠신지요? 말씀으로 보면 이미 해보신 것 같네요.

  3. 내가최고야 2020.05.21 00:00

    선생님 또 질문드립니다 ^^;

    4pda 포럼 가봤는데

    펌웨어란에 보면

    첨부 된 이미지 영어 펌웨어 v.1.0.9na (원본, OTA)
    첨부 된 이미지 영어 펌웨어 v.1.0.8na (SSH, GPS + USB 저장 장치를 사용하여 SRT / KML / GPX 자동 생성)

    첨부 된 이미지 러시아어 펌웨어 v.1.0.7ru (SSH, 자동 생성 SRT / KML / GPX 및 GPS + USB 저장 장치 포함)
    첨부 된 이미지 러시아어 (서비스) 펌웨어 v.1.0.7ru (원본, OTA)

    Nutey의 비공식 펌웨어 1.0.7v5 (중국어 , 영어 , 통합 멀티 패치 v.5 기반)첨부 된 이미지첨부 된 이미지
    비공식 펌웨어 MIXED 1.0.7v5 by v_max (중국어 첨부 된 이미지, 영어 첨부 된 이미지, 통합 멀티 패치 v.5 + USB 저장 장치 + 스크립트 기반)

    첨부 된 이미지 중국어 펌웨어 v.1.0.7 (SSH, GPS + USB 저장 장치를 사용하여 SRT / KML / GPX 자동 생성)
    첨부 된 이미지 중국어 펌웨어 v.1.0.7 (SSH가없고 중국어 음성이 작동하는 원본)

    이렇게 번역되는데 딴건 다운이 되는데 MIXED 1.0.7v5 by v_max 만 유일하게 다운이 안되더라구요
    저게 다운이 되면 위에 올려주신 v.1.0.7 버전에서도 스크립트를 사용할수있고
    타임랩스도 가능할텐데

    혹시 ssh 가 되는 v1.0.7 버전 펌웨어 가지고 계신가요?
    유일하게 타임랩스는 v1.0.7버전만 가능하더라구용 ㅠㅠ

    • Favicon of https://blog.limerainne.win limerainne 2020.05.21 21:03 신고

      다운로드 되긴 하는 것 같아요. 그런데 저는 아직은 안 쓸거라.. 휴대폰이라던지 다른 인터넷 네트워크에서 다시 시도해보세요..

리소스 오버레이 프로젝트 폴더 준비: 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 내장 도구인 리소스 오버레이를 알아봤습니다.
읽으시느라 고생하셨습니다!

+ Recent posts