Bluetooth 오디오 품질을 크게 향상시키기 위해 Android에서 Bluetooth 스택을 수정하는 방법

경고 :이 안내서는 Android에서 Bluetooth 스택을 수정하는 고급 안내서입니다.이 안내서를 완전히 읽고 제공된대로 모든 지시 사항을 따르십시오.

블루투스 헤드셋과 블루투스 오디오가 인기를 얻었음에도 불구하고 블루투스 스트리밍을 통해 무선으로 오디오 정보와 주파수의 비트가 손실됨에 따라 블루투스가 오디오 품질을 낮추는 것으로 입증 되었기 때문에 오디오 애호가에게는 약간의 문제가되었습니다.

그렇기 때문에 일부 제조업체는 모든 헤드폰과 대부분의 Bluetooth 장치에서 지원하는 표준 SBC Bluetooth 코덱보다 음질을 향상시키기 위해 aptX 및 LDAC 코덱을 사용하고 있습니다. 그러나 aptX 및 LDAC 코덱이있는 장치는 이러한 코덱 때문에 훨씬 비쌉니다. 소비자가 장기적으로 지불하는 라이센스 비용이 필요합니다.

SBC Bluetooth 코덱의 낮은 오디오 품질은 모든 현재 Bluetooth 스택 및 헤드폰 구성의 인공적인 제한으로 인해 발생하며이 제한은 기존 장치에서 우회 할 수 있습니다.

Bluetooth 오디오에 관심이있는 경우이 가이드의 끝 부분에서 Bluetooth 오디오 로그 덤프를 가져 와서 Android Bluetooth 수신기에서 어떤 오디오 품질 및 주파수를 받고 있는지 확인하는 방법을 알려드립니다.

이 안내서의 대부분은 표준 SBC Bluetooth 코덱의 출력 품질을 크게 향상시키기 위해 Bluetooth 오디오 출력을 읽는 몇 가지 간단한 조정 및 방법에 중점을 둘 것입니다.이 교육 안내서는 교육적인 내용이므로주의 깊게 읽어보십시오. 장치 모델에 따라 깜박이거나 조정됩니다.

이 안내서의 마지막 부분에는 널리 사용되는 많은 Android 장치 용으로 사전 패치 된 Bluetooth 스택 목록이 있습니다. 다른 플래시 가능한 .zip처럼 복구시 플래시 될 수 있습니다. Android에서 블루투스 스택 수정 가이드를 따르십시오.

SBC 코덱에 대한 간단한 기술 정보

SBC에는 연결 설정 단계에서 협상되는 다양한 매개 변수가 있습니다.

  • 오디오 채널 유형 및 번호 : 조인트 스테레오, 스테레오, 듀얼 채널, 모노;
  • 주파수 대역 수 : 4 또는 8;
  • 한 패킷의 오디오 블록 수 : 4, 8, 12, 16;
  • 양자화 비트 할당 알고리즘 : Loudness, SNR;
  • 양자화 프로세스에 사용되는 최대 및 최소 비트 풀 : 일반적으로 2-53.

디코더는 이러한 파라미터의 조합을 지원해야합니다. 인코더는 그중 일부만 구현할 수 있습니다.

기존 Bluetooth 스택은 일반적으로 조인트 스테레오, 8 밴드, 16 블록, 라우드니스, 비트 풀 2..53 프로파일을 협상합니다. 이 프로파일은 328kbps의 비트 전송률로 44.1kHz 오디오를 인코딩합니다.

비트 풀 매개 변수는 동일한 프로필 내에서 비트 전송률에 직접 영향을줍니다. 비트 풀이 높을수록 비트 전송률이 높으므로 품질이 향상됩니다.

그러나 비트 풀 매개 변수는 특정 프로필에 바인딩되지 않습니다. 비트 전송률은 오디오 채널 유형, 주파수 대역 수, 오디오 블록 수와 같은 다른 매개 변수의 영향도 크게받습니다. 비트 풀을 변경하지 않고 비표준 프로필을 협상하여 간접적으로 비트 전송률을 높일 수 있습니다.

예를 들어, 듀얼 채널은 각 채널의 전체 비트 풀을 사용하여 채널을 개별적으로 인코딩합니다. 장치가 Joint Stereo 대신 Dual Channel을 사용하게하면 동일한 최대 비트 풀 인 617kbps에서 거의 두 배의 비트 전송률을 얻을 수 있습니다.

나에게 그것은 비트 풀이 내부 변수 여야한다고 생각합니다. 비트 풀 값이 다른 코덱 매개 변수에 바인딩되지 않고 전역 값으로 만 정의되는 것은 A2DP 사양 설계 결함입니다.

이 고정 비트 풀 및 비트 전송률 값은 고품질 오디오에 권장되는 값에서 시작됩니다. 그러나 권장 사항은 프로파일을 이러한 값으로 제한하는 변명이 아닙니다.

2007 년부터 2015 년까지 활성화 된 A2DP 사양 v1.2는 모든 디코더가 최대 512kbps의 비트 전송률로 올바르게 작동해야합니다.

SNK의 디코더는 최대 비트 레이트를 초과하지 않는 모든 가능한 비트 풀 값을 지원해야합니다. 이 프로파일은 사용 가능한 최대 비트 전송률을 모노의 경우 320kb / s로, 2 채널 모드의 경우 512kb / s로 제한합니다.

새 버전의 사양에서는 비트 전송률 제한이 없습니다. 2015 년 이후 출시 된 최신 헤드폰은 최대 1000kbps의 비트 전송률 지원할 수 있다고 가정합니다.

어떤 이유로 현재 테스트 된 모든 Bluetooth 스택 (Linux (PulseAudio), Android, Blackberry 및 macOS)에는 최대 비트 풀 매개 변수에 대한 인공 제한이 있으며 이는 최대 비트 전송률에 직접적인 영향을줍니다. 그러나 이것은 가장 큰 문제는 아니며 거의 모든 헤드폰이 최대 비트 풀 값을 53으로 제한합니다.

대부분의 장치는 인터럽트 및 크래킹없이 507kbps의 비트 전송률로 수정 된 Bluetooth 스택에서 제대로 작동합니다. 그러나 이러한 비트 전송률은 일반적인 상황에서 재고 Bluetooth 스택과 협상되지 않습니다.

*** 아래 가이드를 사용한 테스트에 필요 : bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

PC에서 테스트하는 방법

높은 비트 전송률 SBC 헤드폰 호환성 테스트는 Bluetooth 어댑터를 사용하여 PC에서 가장 쉽게 수행 할 수 있습니다. 가상 머신에서 실행할 수있는 수정 된 Bluetooth 스택으로 Ubuntu 이미지를 준비했습니다 (가상 머신 내부의 USB 장치로 Bluetooth 어댑터를 연결하거나 랩톱에 내장 된 어댑터와도 작동 함). USB 플래시 드라이브. 이 이미지는 듀얼 채널, 8 밴드, 16 블록, 라우드니스, 비트 풀 2..41, 44.1 kHz의 프로필을 사용하여 485kbps 비트 전송률을 제공합니다.

VM에서 실행

  • Virtualbox 및 Virtualbox Extension Pack 다운로드 : //www.virtualbox.org/wiki/Downloads;
  • Virtualbox를 설치하고 시작하십시오.
  • 파일 → 환경 설정 → 확장을 사용하여 확장 팩을 설치하십시오.
  • 새로운 가상 머신 생성 : Linux, Ubuntu (64 비트), 1024 RAM. HDD를 만들지 마십시오.
  • 가상 머신 설정으로 이동하고, 스토리지에서 컨트롤러 : IDE, 비어 있음을 선택하고 CD 아이콘 → 가상 광 디스크 파일 선택을 선택하십시오.
  • 다운로드 된 블루투스-듀얼 채널-테스트-우분투 -18.04.1-desktop-amd64.iso를 선택하십시오.
  • 설정 창을 저장하고 닫고 가상 머신을 시작하십시오.
  • 오른쪽 하단의 USB 케이블 아이콘을 마우스 오른쪽 버튼으로 클릭하고 Bluetooth 어댑터를 선택하십시오.

PC에서 실행

이미지는 BIOS / CSM 및 UEFI 부팅을 지원합니다.

  • Etcher : //etcher.io/를 사용하여 이미지를 USB 플래시 드라이브에 굽습니다. 이 작업은 USB 드라이브의 모든 기존 파일을 삭제합니다.
  • PC를 끄십시오.
  • USB 플래시 드라이브를 삽입하고 PC를 켜고 부팅 순서 버튼 (보통 Esc 또는 F12)을 누릅니다.
  • USB 플래시 드라이브를 선택하십시오.

테스트 수행

  • (선택 사항이지만 권장 됨) 데스크탑에서 "Btsnoop Dump"스크립트를 두 번 클릭하십시오. 나중에 분석하기 위해 Bluetooth 데이터 캡처를 시작합니다. 터미널 창을 닫지 마십시오.
  • 헤드폰을 페어링 모드로 전환하십시오.
  • 오른쪽 상단의 화살표를 클릭하고 Bluetooth 아이콘 → Bluetooth 설정을 선택하십시오.
  • 헤드폰을 선택하고 페어링이 완료 될 때까지 기다렸다가 창을 닫으십시오.
  • 우분투 볼륨을 약 2/3로 설정하십시오. 헤드셋 버튼을 사용하여 페어링 한 후에도 소리가 크게 들릴 수 있으므로 볼륨을 줄이십시오.
  • "music"폴더를 열고 "testrecord1.flac"를 재생하십시오.
  • (선택 사항이지만 권장 됨) 플레이어를 닫고 터미널 창을 닫습니다. 데이터 캡처가 중지됩니다.
  • (선택적이지만 권장 됨) Firefox 브라우저를 열고 데이터 덤프 (데스크톱의 btsnoop_hci.btsnoop)를 //btcodecs.valdikss.org.ru/에 업로드하십시오.

음악 폴더에서 다른 음악을 듣거나 자신의 음악을 업로드 할 수 있습니다.

헤드폰에 딱딱 거리는 소리, 오디오 중단 또는 기타 사운드 왜곡이 없어야합니다. 좋은 고품질 사운드가 들리면 헤드폰에서 비트 전송률이 485kbps 인 오디오를 지원한다는 의미입니다.

Android 기기에서 테스트하는 방법

Android 스마트 폰 또는 태블릿에서 테스트하려면 루트 권한이 필요한 수정 된 Bluetooth 스택을 사용해야합니다.

안드로이드에서 블루투스 데이터 덤프를 캡처하는 방법

  1. 블루투스를 끕니다.
  2. 개발자 설정에서“Bluetooth HCI 스눕 로그 활성화”스위치를 활성화하십시오.
  3. Bluetooth를 켜고 Bluetooth 메뉴를 사용하여 헤드셋에 연결하십시오 (중요합니다! 자동 연결을 허용하지 마십시오!);
  4. 짧은 오디오 샘플을 재생합니다.
  5. 개발자 설정을 열고 "Bluetooth HCI 스눕 로그 활성화"스위치를 비활성화하십시오.
  6. /storage/emulated/0/btsnoop_hci.log 또는 /data/misc/bluetooth/logs/btsnoop_hci.log가 작성되어 있어야합니다. 누락 된 경우 텍스트 편집기로 /etc/bluetooth/bt_stack.conf를 열고 BtSnoopFileName 옵션의 경로를 확인하십시오.

헤드폰에 딱딱 거리는 소리, 오디오 중단 또는 기타 사운드 왜곡이 없어야합니다. 패치 된 라이브러리에서 좋은 고품질 사운드를 듣는 경우 헤드폰이 512kbps의 비트 전송률로 오디오를 지원한다는 의미입니다.

위의 알고리즘을 신중하게 따르십시오. 특히, 헤드폰의 전원을 끄거나 페어링 후에 연결을 끊을 경우 Bluetooth 설정에서 헤드폰을 수동으로 연결하는 것이 중요합니다. 자동 연결을 허용하지 마십시오!

최소 512 kbit / s SBC를 지원하는 장치

  • 1MORE iBFree
  • JBL 에베레스트 310
  • JBL 에베레스트 700
  • 스컬 캔디 HESH 3
  • 소니 WI-C400
  • 소니 MDR-1ABT
  • 소니 MDR-ZX770BT
  • 소니 MDR-XB650BT
  • 소니 MDR-XB950B1
  • 소니 SBH50
  • Bluedio T4 (Bitpool max 39. 듀얼 채널을 지원하지 않지만, 462 kbit / s의 경우 강제로 작동합니다. A2DP 사양을 준수하지 않습니다.)
  • Bluedio T5 (듀얼 채널을 지원하지 않지만 강제로 작동하는 경우 작동합니다. A2DP 사양을 준수하지 않습니다.)
  • Bluedio T6 (듀얼 채널을 지원하지 않지만 강제로 작동하는 경우 작동합니다. A2DP 사양을 준수하지 않습니다. Max 97220 칩을 채택하십시오.)
  • 마샬 메이저 II 블루투스
  • 오버 드라이브 RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • 로지텍 BT 어댑터
  • Noname 자동차 헤드 유닛 (CSR8645 칩)
  • 소니 DSX-A400BT 자동차 헤드 유닛

512 kbit / s 이상의 SBC를 지원하는 장치

  • JBL Everest 310 (617-660 kbit / s)
  • Sony WI-C400 (576kbit / s)
  • Sony MDR-ZX770BT (617-660 kbit / s)
  • Marshall Major II Bluetooth (617-660 kbit / s)
  • 오버 드라이브 RealForce D1 (730kbit / s, 듀얼 채널, 4 개의 서브 밴드)

더 높은 비트 전송률 또는 듀얼 채널에서 작동하지 않는 장치

  1. 하퍼 HB-202 (딱딱; BK3256 칩)
  2. Sony Ericsson MW600 (고주파 왜곡, 크래킹, 2009 년의 장치)

이것이 중요한 이유 : SBC 328k 및 485k vs aptX

aptX 음질에 대한 대중의 믿음과는 달리 표준 328k 비트 전송률로 SBC보다 오디오 품질이 떨어질 수 있습니다.

SBC는 주파수 대역에 대해 양자화 비트를 동적으로 할당하여 "하단"으로 작동합니다. 전체 비트 전송률이 하위 및 중간 주파수에 사용 된 경우 상위 주파수는 "차단"됩니다 (무음).

aptX는 동일한 비트 수로 주파수 대역을 지속적으로 양자화하여 일정한 비트 전송률 코덱을 만듭니다. 44.1kHz의 경우 352kbps, 48kHz의 경우 384kbps입니다. 대부분 필요한 주파수로 비트를 전송할 수 없습니다. SBC와 달리 aptX는 주파수를 "절단"하지 않지만 양자화 노이즈를 추가하여 오디오의 동적 범위를 줄이고 때로는 크 래클을 발생시킵니다. 반대로 SBC는“세부 사항을 먹는다”– 가장 조용한 지역을 버린다.

평균적으로, aptX는 SBC 328k와 비교하여 넓은 주파수 범위의 음악에서는 왜곡이 적지 만 좁은 주파수 범위와 넓은 동적 범위의 음악에서는 때때로 SBC 328k가 이깁니다.

특별한 경우, 피아노 녹음을 고려해 봅시다. 스펙트로 그램은 다음과 같습니다.

가장 많은 에너지는 0-4 kHz 주파수에 있으며 최대 10 kHz까지 지속됩니다.

aptX 파일의 스펙트로 그램은 다음과 같습니다.

다음은 SBC 328k입니다.

SBC 328k는 16kHz 이상의 범위를 주기적으로 완전히 차단하고이 값 미만의 범위에 대해 사용 가능한 모든 비트 전송률을 사용했음을 알 수 있습니다. 그러나, aptX는 사람의 귀에 의해들을 수있는 주파수 스펙트럼에 더 많은 왜곡을 도입했으며, 이는 aptX 스펙트로 그램에서 빼낸 원래 스펙트로 그램에서 볼 수 있습니다 (더 밝을수록 더 많은 왜곡).

SBC 328k가 0에서 10 kHz 범위의 신호를 덜 왜곡시키면서 나머지는 거의 없습니다 :

SBC의 비트 전송률 485k는 대역을 끊지 않고 전체 주파수 범위를 저장하기에 충분했습니다.

이 오디오 샘플의 SBC 485k는 0-15kHz 범위에서 aptX보다 훨씬 우수하며 15-22kHz에서 더 작지만 여전히 눈에 띄는 차이가 있습니다 (어둡고 왜곡이 적음).

높은 비트 전송률 SBC로 전환하면 대부분의 헤드폰에서 aptX보다 우수한 사운드를 얻을 수 있습니다.

  • original_and_aptx.zip
  • sbc.zip

Android 5 – 7에서 Bluetooth 스택을 수정하는 방법

이러한 수정 사항은 재고 Android Bluetooth 스택 Bluedroid (Android 5) 및 Fluoride (Android 6-7)에 적용해야합니다. Qualcomm 수정 스택은 지원되지 않습니다.

표준 SBC 구성에서 조인트 스테레오를 듀얼 채널로 교체

안드로이드 / 플랫폼 / 외부 / 블루투스 / 블루 드로이드 /btif/co/bta_av_co.c:99

암호:

 CONST tA2D_SBC_CIE btif_av_sbc_default_config = {BTIF_AV_SBC_DEFAULT_SAMP_FREQ / * samp_freq * / A2D_SBC_IE_CH_MD_JOINT / * ch_mode * / A2D_SBC_IE_BLOCKS_16 / * block_len * / A2D_SBC_IE_SUBBAND_8 / * num_subbands * / A2D_SBC_IE_ALLOC_MD_L / * alloc_mthd * / BTA_AV_CO_SBC_MAX_BITPOOL / * max_bitpool * / A2D_SBC_IE_MIN_BITPOOL / * min_bitpool * /}; 

A2D_SBC_IE_CH_MD_JOINT를 A2D_SBC_IE_CH_MD_DUAL로 바꾸십시오.

듀얼 채널 우선 순위 증가

안드로이드 / 플랫폼 / 외부 / 블루투스 / 블루 드로이드 /btif/co/bta_av_co.c:4

암호:

 if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; 그렇지 않은 경우 (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; 그렇지 않은 경우 (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; 그렇지 않으면 (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; A2D_SBC_IE_CH_MD_DUAL을 사용하여 맨 위로 이동하십시오. 
  1. 비트 전송률 제한 비활성화 또는 증가

Android 블루투스 스택에는 비트 풀 제한뿐만 아니라 비트 전송률 제한 (328 kbit / s)도 있습니다. 헤드폰이 예를 들어 48kHz의 비트 풀 53을 지원하는 경우 Android는 비트 풀을 328kbit / s 제한에 맞게 줄입니다. 이는 인코딩 단계에서 코덱 협상 후 Bluetooth SetCapabilities 패킷의 비트 풀 값을 고려하지 않은 경우에 발생합니다.

안드로이드 / 플랫폼 / 외부 / 블루투스 / 블루 드로이드 /btif/src/btif_media_task.c:172

암호:

 #define DEFAULT_SBC_BITRATE 328 

512로 교체하십시오.

  1. (실험에만 해당) MTU 제한을 비활성화합니다.

~ 580 kbit / s보다 높은 비트 전송률에 필요합니다.

btif / src / btif_media_task.c : 174

암호:

 / * 679 바이트의 2DH5 페이로드 크기-(4 바이트 L2CAP 헤더 + 12 바이트 AVDTP 헤더) * / #define MAX_2MBPS_AVDTP_MTU 663 

Android 8 – 9에서 Bluetooth 스택을 수정하는 방법

이러한 수정은 테스트되지 않았지만 작동합니다.

A2DP SBC 소스에 듀얼 채널 지원 추가

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:55

암호:

 / * SBC SRC 코덱 기능 * / 정적 const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO; 

ch_mode에 A2DP_SBC_IE_CH_MD_DUAL을 추가하십시오.

기본 설정에서 조인트 스테레오를 듀얼 채널로 교체

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:82

암호:

 / * 디폴트 SBC 코덱 설정 * / CONST tA2DP_SBC_CIE의 a2dp_sbc_default_config = {A2DP_SBC_IE_SAMP_FREQ_44 / * samp_freq * / A2DP_SBC_IE_CH_MD_JOINT / * ch_mode * / A2DP_SBC_IE_BLOCKS_16 / * block_len * / A2DP_SBC_IE_SUBBAND_8 / * num_subbands * / A2DP_SBC_IE_ALLOC_MD_L / * alloc_method * / A2DP_SBC_IE_MIN_BITPOOL, / * min_bitpool * / A2DP_SBC_MAX_BITPOOL, / * max_bitpool * / BTAV_A2DP_CODEC_BITS_PER_SAMPLE_16 / * bits_per_sample * /}; 

A2DP_SBC_IE_CH_MD_JOINT를 A2DP_SBC_IE_CH_MD_DUAL로 바꾸십시오.

듀얼 채널 우선 순위 증가

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:1155

암호:

 정적 bool select_best_channel_mode (uint8_t ch_mode, tA2DP_SBC_CIE * p_result, btav_a2dp_codec_config_t * p_codec_config) {if (ch_mode & A2DP_SBC_IE_CH_MD_JOINT) {p_result-> ch_mode_IE_DP_IE__ p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; true를 반환; } if (ch_mode & A2DP_SBC_IE_CH_MD_STEREO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_STEREO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; true를 반환; } if (ch_mode & A2DP_SBC_IE_CH_MD_DUAL) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_DUAL; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; true를 반환; } if (ch_mode & A2DP_SBC_IE_CH_MD_MONO) {p_result-> ch_mode = A2DP_SBC_IE_CH_MD_MONO; p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_MONO; true를 반환; } 거짓을 반환; } 

A2DP_SBC_IE_CH_MD_DUAL을 사용하여 맨 위로 이동하십시오.

비트 전송률 제한 증가

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:42

암호:

 #define A2DP_SBC_DEFAULT_BITRATE 328 

512로 교체하십시오.

  1. (실험에만 해당) MTU 제한 비활성화

~ 580 kbit / s보다 높은 비트 전송률에 필요합니다.

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:47

암호:

 #define MAX_2MBPS_AVDTP_MTU 663 

패치 된 블루투스 스택 (플래시 블)

  • Le Max 2 Oreo Patched.zip
  • LeEco Cool Changer S1 EUI_5.8.19S.zip
  • Leeco LE2 (EUI 5.9.26s, Android 6) .zip
  • Xiaomi Mi Note (Miui 9 Miui.su usnkreal v8.4.12, Android 6.0.1) .zip
  • Xiaomi Mi Note 3 (MIUI 9, Android 7) .zip
  • Xiaomi Mi4c (Android 7.0 NRD90M, MIUI-9.5 9.5.1.0 (NXKCNFA)). zip
  • Xiaomi MI5s (MIUI Global 9.6.1.0, Android 7) .zip
  • Xiaomi Redmi 3s (android 6.01, mmb29m, miui global 9.6.1.0) .zip
  • Xiaomi Redmi 4 (MiuiPro 10 8.8.2, Android 6.0.1, MMB29M) .zip
  • Xiaomi Redmi 4 Prime.zip
  • Xiaomi Redmi 4 pro (MIUI 9, miuipro 8.4.26) .zip
  • Xiaomi Redmi Note 3 (Resurrection Remix Android 7.1.2_r36) .zip
  • Redmi Note 4x (Masik Premium, Android 7.0) .zip
  • 아수스 줌 (Android 5, 2.26.40.108_20160520) .zip
  • Le Max 2 Oreo Patched.zip
  • 화웨이 P9 (Android 7) .zip
  • Samsung Galaxy S4 LTE GT-I9505 (Android 7.1.2; LineageOS 14.1-20180615-NIGHTLY-jfltexx) .zip
  • 지퍼
  • Le Max 2 Oreo Patched.zip

재미있는 기사