Jak modyfikować stosy Bluetooth na Androidzie, aby uzyskać znacznie lepszą jakość dźwięku Bluetooth

Ostrzeżenie: jest to bardzo zaawansowany przewodnik, który polega na modyfikowaniu stosów Bluetooth na Androidzie - przeczytaj ten przewodnik w całości i postępuj zgodnie ze wszystkimi instrukcjami dokładnie tak, jak podano.

Pomimo faktu, że zestawy słuchawkowe Bluetooth i dźwięk Bluetooth stały się dość popularne, jest to pewien problem dla audiofilów, ponieważ udowodniono, że Bluetooth obniża jakość dźwięku, ponieważ bity informacji audio i częstotliwości gubią się w powietrzu przez transmisję Bluetooth.

Dlatego niektórzy producenci wprowadzają kodeki aptX i LDAC, aby poprawić jakość dźwięku w porównaniu ze standardowym kodekiem SBC Bluetooth, który jest obsługiwany przez wszystkie słuchawki i większość urządzeń Bluetooth - jednak urządzenia z kodekami aptX i LDAC są znacznie droższe, ponieważ te kodeki wymagają opłat licencyjnych, które konsument płaci w dłuższej perspektywie.

Niska jakość dźwięku kodeka SBC Bluetooth jest spowodowana sztucznymi ograniczeniami wszystkich obecnych stosów Bluetooth i konfiguracji słuchawek, a ograniczenie to można obejść na dowolnym istniejącym urządzeniu.

Jeśli interesujesz się dźwiękiem Bluetooth, na końcu tego przewodnika pokażemy Ci, jak zrobić zrzut dziennika audio Bluetooth i sprawdzić go, aby zobaczyć, jaką jakość dźwięku i częstotliwość otrzymujesz z odbiornika Bluetooth Androida.

Większość tego przewodnika skupia się na kilku prostych poprawkach i sposobach odczytywania wyjścia audio Bluetooth, aby znacznie poprawić jakość wyjściową standardowych kodeków SBC Bluetooth - przeczytaj uważnie cały przewodnik, ponieważ jest on edukacyjny i jest wiele różnych rzeczy flashować lub poprawiać, w zależności od modelu urządzenia.

Na końcu tego przewodnika znajduje się lista wstępnie załatanych stosów Bluetooth dla wielu popularnych urządzeń z Androidem - można je przywrócić w trybie odzyskiwania, tak jak w przypadku każdego innego flashowanego pliku .zip - jeśli żadne z urządzeń nie należy do ciebie, będziesz mieć postępować zgodnie z instrukcjami dotyczącymi modyfikowania stosów Bluetooth na Androidzie.

Krótka informacja techniczna na temat kodeka SBC

SBC ma wiele różnych parametrów, które są negocjowane podczas fazy konfiguracji połączenia:

  • Typ i numer kanału audio: Joint Stereo, Stereo, Dual Channel, Mono;
  • Liczba pasm częstotliwości: 4 lub 8;
  • Liczba bloków audio w jednym pakiecie: 4, 8, 12, 16;
  • Algorytm alokacji bitów kwantyzacji: Głośność, SNR;
  • Maksymalna i minimalna pula bitów stosowana w procesie kwantyzacji: zwykle 2-53.

Dekoder jest wymagany do obsługi dowolnej kombinacji tych parametrów. Enkoder może implementować tylko część z nich.

Istniejące stosy Bluetooth zwykle negocjują następujący profil: Joint Stereo, 8 pasm, 16 bloków, Loudness, bitpool 2..53. Ten profil koduje dźwięk 44, 1 kHz z przepływnością 328 kb / s.

Parametr Bitpool wpływa bezpośrednio na szybkość transmisji w tym samym profilu: im wyższa, tym wyższa szybkość transmisji, a tym samym jakość.

Jednak parametr bitpool nie jest powiązany z określonym profilem. Na szybkość transmisji wpływ mają również inne parametry: typ kanału audio, liczba pasm częstotliwości, liczba bloków audio. Możesz zwiększyć przepływność pośrednio, negocjując niestandardowe profile, bez zmiany puli bitów.

Na przykład, Dual Channel koduje kanały osobno, używając całej puli bitów dla każdego kanału. Zmuszenie urządzenia do korzystania z Dual Channel zamiast Joint Stereo zapewni nam prawie dwukrotną przepływność przy tym samym maksymalnym puli bitów, 617 kb / s.

Uważam, że pula bitów powinna być zmienną wewnętrzną. Błąd projektowy specyfikacji A2DP polega na tym, że wartość puli bitów nie jest związana z innymi parametrami kodeka i jest definiowana tylko jako wartość globalna.

Te stałe wartości Bitpool i Bitrate pochodzą z zalecanych wartości dla dźwięku wysokiej jakości. Ale zalecenie nie jest wymówką, aby ograniczyć profil do tych wartości.

Specyfikacja A2DP 1.2, która była aktywna w latach 2007-2015, wymaga, aby wszystkie dekodery działały poprawnie z przepływnością do 512 kb / s:

Dekoder SNK powinien obsługiwać wszystkie możliwe wartości puli bitów, które nie powodują przekroczenia maksymalnej przepływności. Ten profil ogranicza dostępną maksymalną przepływność do 320 kb / s dla trybu mono i 512 kb / s dla trybów dwukanałowych.

W nowej wersji specyfikacji nie ma ograniczenia przepływności. Zakłada się, że nowoczesne słuchawki wydane po 2015 roku mogą obsługiwać przepływności do 1000 kb / s .

Z jakiegoś powodu wszystkie obecnie testowane stosy Bluetooth (Linux (PulseAudio), Android, Blackberry i macOS) mają sztuczne ograniczenia maksymalnego parametru puli bitów, co bezpośrednio wpływa na maksymalną przepływność. Ale to nie jest największy problem, prawie wszystkie słuchawki również ograniczają maksymalną wartość bitpool do 53.

Większość urządzeń działa dobrze na zmodyfikowanym stosie Bluetooth o przepływności 507 kb / s, bez przerw i trzasków. Ale taka szybkość transmisji nigdy nie będzie negocjowana w normalnych warunkach, przy standardowych stosach Bluetooth.

*** Wymagane do testowania przy użyciu poniższych przewodników: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

Jak testować na komputerze

Test zgodności słuchawek SBC o wysokiej przepływności jest najłatwiejszy do przeprowadzenia na komputerze PC z adapterem Bluetooth. Przygotowałem obraz Ubuntu ze zmodyfikowanym stosem Bluetooth, który można uruchomić jak na maszynie wirtualnej (podłączając adapter Bluetooth jako urządzenie USB wewnątrz maszyny wirtualnej, działa on również z adapterami wbudowanymi w laptopy) lub uruchamiając z pamięć flash USB. Ten obraz używa następującego profilu: Dual Channel, 8 pasm, 16 bloków, Loudness, bitpool 2..41, 44, 1 kHz, co zapewnia przepływność 485 kb / s.

Uruchamianie na maszynie wirtualnej

  • Pobierz Virtualbox i Virtualbox Extension Pack: //www.virtualbox.org/wiki/Downloads;
  • Zainstaluj Virtualbox, uruchom go;
  • Zainstaluj pakiet rozszerzeń za pomocą Plik → Preferencje → Rozszerzenia;
  • Utwórz nową maszynę wirtualną: Linux, Ubuntu (64-bit), 1024 RAM. Nie twórz dysku twardego.
  • Przejdź do ustawień maszyny wirtualnej, w obszarze Pamięć wybierz Kontroler: IDE, Pusty, naciśnij ikonę CD → Wybierz plik wirtualnego dysku optycznego;
  • Wybierz pobrany bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • Zapisz i zamknij okno ustawień, uruchom maszynę wirtualną;
  • Kliknij prawym przyciskiem myszy ikonę kabla USB w prawym dolnym rogu, wybierz adapter Bluetooth;

Działa na komputerze

Obraz obsługuje uruchamianie BIOS / CSM i UEFI.

  • Wypal obraz na dysk flash USB za pomocą Etcher: //etcher.io/. Ta operacja spowoduje usunięcie wszystkich istniejących plików na dysku USB.
  • Wyłącz komputer;
  • Włóż pamięć flash USB, włącz komputer i naciśnij przycisk kolejności rozruchu (zwykle Esc lub F12);
  • Wybierz dysk flash USB.

Przeprowadzanie testu

  • (opcjonalnie, ale zalecane) Kliknij dwukrotnie skrypt „Btsnoop Dump” na pulpicie. Rozpocznie się przechwytywanie danych Bluetooth do późniejszej analizy. Nie zamykaj okna terminala.
  • Przełącz słuchawki w tryb parowania;
  • Kliknij strzałkę w prawym górnym rogu, wybierz ikonę Bluetooth → Ustawienia Bluetooth;
  • Wybierz słuchawki, poczekaj na zakończenie parowania i zamknij okno;
  • Ustaw głośność Ubuntu na około 2/3. Zmniejsz również głośność za pomocą przycisków zestawu słuchawkowego, ponieważ po sparowaniu może być bardzo głośno.
  • Otwórz folder „music”, zagraj „testrecord1.flac”;
  • (opcjonalnie, ale zalecane) Zamknij odtwarzacz, zamknij okno terminala. To zatrzyma przechwytywanie danych.
  • (opcjonalnie, ale zalecane) Otwórz przeglądarkę Firefox, prześlij zrzut danych (btsnoop_hci.btsnoop na pulpicie) do //btcodecs.valdikss.org.ru/

Możesz słuchać innej muzyki w folderze muzyki lub przesłać własną;

W słuchawkach nie powinno być żadnych trzasków, zakłóceń dźwięku ani innych zniekształceń dźwięku. Jeśli słyszysz dźwięk wysokiej jakości, oznacza to, że Twoje słuchawki obsługują dźwięk o przepływności 485 kb / s.

Jak testować na urządzeniu z Androidem

Aby przeprowadzić test ze smartfona lub tabletu z Androidem, musisz użyć zmodyfikowanego stosu Bluetooth, który wymaga uprawnień administratora.

Jak przechwycić zrzut danych Bluetooth na Androidzie

  1. Wyłącz Bluetooth;
  2. W Ustawieniach programisty włącz przełącznik „Włącz dziennik snoop Bluetooth HCI”;
  3. Włącz Bluetooth, połącz się z zestawem słuchawkowym za pomocą menu Bluetooth (to ważne! Nie zezwalaj na automatyczne połączenie!);
  4. Odtwórz krótką próbkę audio;
  5. Otwórz ustawienia programisty, wyłącz przełącznik „Włącz dziennik snoop Bluetooth HCI”;
  6. Powinien zostać utworzony /storage/emulated/0/btsnoop_hci.log lub /data/misc/bluetooth/logs/btsnoop_hci.log. Jeśli go brakuje, otwórz /etc/bluetooth/bt_stack.conf za pomocą edytora tekstu i zobacz ścieżkę w opcji BtSnoopFileName.

W słuchawkach nie powinno być żadnych trzasków, zakłóceń dźwięku ani innych zniekształceń dźwięku. Jeśli słyszysz dobry dźwięk wysokiej jakości z łataną biblioteką, oznacza to, że twoje słuchawki obsługują dźwięk z przepływnością 512 kb / s.

Postępuj zgodnie z powyższym algorytmem. Szczególnie, jeśli wyłączysz słuchawki lub rozłączysz po sparowaniu, ważne jest, aby ręcznie połączyć się ze słuchawkami z poziomu ustawień Bluetooth, nie zezwalaj na automatyczne połączenie!

Urządzenia obsługujące co najmniej 512 kbit / s SBC

  • 1 WIĘCEJ iBFree
  • JBL Everest 310
  • JBL Everest 700
  • Skullcandy HESH 3
  • Sony WI-C400
  • Sony MDR-1ABT
  • Sony MDR-ZX770BT
  • Sony MDR-XB650BT
  • Sony MDR-XB950B1
  • Sony SBH50
  • Bluedio T4s (Bitpool max 39. Odpowiedz, aby nie obsługiwać dwukanałowego kanału, ale działa, jeśli jest wymuszony, 462 kbit / s. Nie jest zgodny ze specyfikacją A2DP.)
  • Bluedio T5 (Odpowiedz, aby nie obsługiwać dwukanałowego kanału, ale działa, jeśli jest wymuszony. Nie jest zgodny ze specyfikacją A2DP).
  • Bluedio T6 (Odpowiedz, aby nie obsługiwać dwukanałowego, ale działa, jeśli jest wymuszony. Nie jest zgodny ze specyfikacją A2DP. Adopt Max 97220).
  • Marshall Major II Bluetooth
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • Adapter Logitech BT
  • Radioodtwarzacz samochodowy Noname (układ CSR8645)
  • Radioodtwarzacz samochodowy Sony DSX-A400BT

Urządzenia obsługujące SBC wyższe niż 512 kbit / s

  • JBL Everest 310 (617-660 kbit / s)
  • Sony WI-C400 (576 kbit / s)
  • Sony MDR-ZX770BT (617-660 kbit / s)
  • Marshall Major II Bluetooth (617-660 kbit / s)
  • Overdrive RealForce D1 (730 kbit / s, dwukanałowy, 4 podpasma)

Urządzenia, które nie działają z wyższą przepływnością lub z dwukanałowym kanałem

  1. Harper HB-202 (trzaski; chip Beken BK3256)
  2. Sony Ericsson MW600 (zniekształcenie wysokiej częstotliwości, trzaski; urządzenie z 2009 r.)

Dlaczego jest to ważne: SBC 328k i 485k vs aptX

Wbrew powszechnemu przekonaniu o jakości dźwięku aptX, w niektórych przypadkach może on wytwarzać gorszą jakość dźwięku niż SBC ze standardową szybkością transmisji 328k.

SBC dynamicznie przydziela bity kwantyzacji dla pasm częstotliwości, działając na zasadzie „od dołu do góry”. Jeśli dla niższych i średnich częstotliwości wykorzystano cały bitrate, wyższe częstotliwości są „odcięte” (wyciszone).

aptX stale kwantyzuje pasma częstotliwości o tej samej liczbie bitów, co czyni go stałym kodekiem bitrate: 352 kb / s dla 44, 1 kHz, 384 kb / s dla 48 kHz. Nie może „przenosić bitów” na częstotliwości, które są w nich najczęściej potrzebne. W przeciwieństwie do SBC, aptX nie „wycina” częstotliwości, ale doda do nich szum kwantyzacji, zmniejszając zakres dynamiczny dźwięku, a czasem wprowadzając trzaski. Przeciwnie, SBC „zjada szczegóły” - odrzuca najcichsze obszary.

Średnio, w porównaniu do SBC 328k, aptX powoduje mniejsze zniekształcenia w muzyce z szerokim zakresem częstotliwości, ale w muzyce z wąskim zakresem częstotliwości i szerokim zakresem dynamicznym czasami SBC 328k wygrywa.

Rozważmy szczególny przypadek, nagranie na fortepian. Oto spektrogram:

Najwięcej energii leży w częstotliwościach 0–4 kHz i trwa do 10 kHz.

Spektrogram pliku aptX wygląda następująco:

Oto SBC 328k:

Można zauważyć, że SBC 328k okresowo całkowicie odcinał zakres powyżej 16 kHz i używał wszystkich dostępnych przepływności dla zakresów poniżej tej wartości. Jednak aptX wprowadził więcej zniekształceń do spektrum częstotliwości słyszalnego przez ludzkie ucho, co można zobaczyć na odjętym oryginalnym spektrogramie od spektrogramu aptX (im jaśniejsze, tym więcej zniekształceń):

Podczas gdy SBC 328k wprowadził mniej zniekształceń, sygnał w zakresie od 0 do 10 kHz, a reszta została:

Szybkość transmisji 485k dla SBC wystarczyła, aby zapisać cały zakres częstotliwości, bez odcinania pasm.

SBC 485k na tej próbce audio jest znacznie lepszy niż aptX w zakresie 0-15 kHz i przy mniejszej, ale wciąż zauważalnej różnicy - przy 15-22 kHz (im ciemniejszy, tym mniej zniekształceń):

Po przejściu na SBC o wysokiej przepływności uzyskasz dźwięk lepszy niż aptX przez większość czasu na dowolnych słuchawkach.

  • original_and_aptx.zip
  • sbc.zip

Jak modyfikować stosy Bluetooth w systemie Android 5 - 7

Te modyfikacje należy zastosować do standardowych stosów bluetooth Android Bluedroid (Android 5) i Fluor (Android 6-7). Stos zmodyfikowany Qualcomm nie jest obsługiwany.

Zamień Joint Stereo na Dual Channel w standardowej konfiguracji SBC

Android / platforma / zewnętrzny / bluetooth / bluedroid / btif / co / bta_av_co.c: 99

Kod:

 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 * /}; 

Zamień A2D_SBC_IE_CH_MD_JOINT na A2D_SBC_IE_CH_MD_DUAL.

Zwiększ priorytet dwukanałowy

Android / platforma / zewnętrzny / bluetooth / bluedroid / btif / co / bta_av_co.c: 4

Kod:

 if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Przenieś, jeśli z A2D_SBC_IE_CH_MD_DUAL na górę. 
  1. Wyłącz lub zwiększ ograniczenie przepływności

Stos bluetooth systemu Android ma nie tylko limit bitpool, ale także limit bitrate, 328 kbit / s. Jeśli słuchawki obsługują na przykład bitpool 53 dla 48 kHz, system Android obniży bitpool do poziomu 328 kbit / s. Stanie się tak PO negocjacjach z kodekami, na etapie kodowania nie uwzględniaj wartości bitpool w pakiecie Bluetooth SetCapabilities.

Android / platforma / zewnętrzny / bluetooth / bluedroid / btif / src / btif_media_task.c: 172

Kod:

 # zdefiniować DEFAULT_SBC_BITRATE 328 

Zamień na 512.

  1. (tylko w przypadku eksperymentów) Wyłącz limit MTU.

Jest to wymagane dla przepływności wyższych niż ~ 580 kbit / s.

btif / src / btif_media_task.c: 174

Kod:

 / * Rozmiar ładunku 2DH5 679 bajtów - (4 bajty Nagłówek L2CAP + 12 bajtów Nagłówek AVDTP) * / # zdefiniować MAX_2MBPS_AVDTP_MTU 663 

Jak modyfikować stosy Bluetooth w systemie Android 8 - 9

Te modyfikacje nie zostały przetestowane, ale powinny działać.

Dodaj obsługę podwójnego kanału do źródła A2DP SBC

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

Kod:

 / * Możliwości kodeka SBC SRC * / static const tA2DP_SBC_CIE a2dp_sbc_caps = A2DP_SBC_IE_SAMP_FREQ_44, / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO; 

dodaj A2DP_SBC_IE_CH_MD_DUAL w trybie ch_mode.

Zamień Joint Stereo na Dual Channel w domyślnej konfiguracji

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

Kod:

 / * Domyślna konfiguracja kodek 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 * /}; 

Zamień A2DP_SBC_IE_CH_MD_JOINT na A2DP_SBC_IE_CH_MD_DUAL.

Zwiększ priorytet dwukanałowy

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

Kod:

 static 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_M_D_JOINT )__ p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; zwróć prawdę; } 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; zwróć prawdę; } 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; zwróć prawdę; } 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; zwróć prawdę; } return false; } 

Przenieś, jeśli z A2DP_SBC_IE_CH_MD_DUAL na górę.

Zwiększ limit przepływności

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

Kod:

 # zdefiniować A2DP_SBC_DEFAULT_BITRATE 328 

Zamień na 512.

  1. (tylko w przypadku eksperymentów) Wyłącz limit MTU

Jest to wymagane dla przepływności wyższych niż ~ 580 kbit / s.

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

Kod:

 # zdefiniuj MAX_2MBPS_AVDTP_MTU 663 

Poprawione stosy Bluetooth (flashowane)

  • 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
  • Asus Zoom (Android 5, 2.26.40.108_20160520) .zip
  • Le Max 2 Oreo Patched.zip
  • Huawei P9 (Android 7) .zip
  • Samsung Galaxy S4 LTE GT-I9505 (Android 7.1.2; LineageOS 14.1-20180615-NIGHTLY-jfltexx) .zip
  • zamek błyskawiczny
  • Le Max 2 Oreo Patched.zip

Ciekawe Artykuły