Різне

Модифікація стічних прошивок для Android. Частина 4. Хабрахабр без ката.

21.02.2017

Модифікація стічних прошивок для Android. Частина 4

Здрастуй Хабр!

У минулій статті ми обговорили деякі нюанси щодо інтерфейсу, а сьогодні спробуємо розібрати детально кожен випадок окремо.

На минулих скріншотах були наступні меню в моєму саморобному твикере і викликало безліч приватних питань про реалізацію.

Переважний слот Виберіть SIM-картку на якій використовувати передачу даних Повідомлення про з’єднання Заборонити оповіщення про інтернет підключенні Автоматична запис дзвінків Всі дзвінки будуть записані стандартним диктофоном згідно з його налаштуванням Заборонити енергозбереження Заборонити іконку енергозбереження в слайдері і статус барі Заборонити вимикачі Відключення в слайдері статус бару

Переважний слот

Так як я є затятим шанувальником двухсімочний телефонів, дана функція потрібна мені для того, щоб мати можливість використовувати інтернет від будь-якого з операторів, де є покриття. 3G/GPRS/EDGE покриття у всіх різне, а необхідність бути справді мобільним, — для мене завдання першорядне. За замовчуванням інтернет працює на першій основній сім карті, але в деяких місцях оператор не має 3G і надає слабку пропускну здатність. урізуючи EDGE тайм слоти на каналі передачі даних, відповідно передача йде по GPRS. Ім’я такий твикер я можу легко переключитися на іншого оператора і мати підключення принаймні під EDGE.

Модифікувати прошивку для цього не обов’язково, а досить викликати діалог і вказати що вам необхідно. Відразу зазначу, що даний код застосуємо до телефонів HTC і був написаний згідно бібліотеці Android .net.HtcIfConnectivityManager.

HtcIfConnectivityManager

Повідомлення про з’єднання

У минулій статті я писав про непотрібному повідомлення, що мій телефон в даний момент використовує передачу даних і показує який APN використовується. Чесно кажучи, мені це не те що потрібно, а дратувало, що і послужило приводом відключення даної функції. Повністю вирізати з прошивки я не став, так як публікую свої роботи для загального користування, а при створенні модифікованих прошивок хорошим тоном вважається залишати кінцевому користувачеві вибирати що йому подобається, а що ні.

Залишилося тільки знайти в якомусь місці даний функціонал спрацьовує. Треба віддати належне, програмісти HTC добре оптимізували код, його приємно читати і легко знаходити потрібне місце. У ООП є звичайно і свої мінуси, так як часом необхідний фрагмент коду потрібно шукати по цілому ланцюжку методів. Ще одна перевага. HTC Sense створений на шаблонах, які по проходженню коду збираються як конструктор Lego, закінчення перетворюючись в повноцінний графічний інтерфейс. У стандартній документації вихідного коду Android пропонується для кожного виклику (intent або dialog) малювати окремий шаблон (layout ) і перший час доводилося шукати дуже довго, так як я шукав інтерфейс оболонки в самій XML розмітки, а не в коді програми.

І так, у 4-му Аднроиде є чудова функція, яка дозволяє дізнатися, хто батько повідомлення. Досить довго натиснути на повідомлення і з’явиться меню, в якому можна подивитися додаток. яке є ініціатором. В моєму випадку виявилося, що це додаток Телефон (Phone.апк).

Потрошимо додаток Розпаковуємо і декомпіліруем додаток з допомогою APK-Multi-Tool. Для цього попередньо треба завантажити, встановити і налаштувати його. Все описано в документації. 1. Кладемо Phone.апк в папку place-apk-here-for-modding 2. Відкриваємо любимо архіватором і видаляємо від туди файл classes.dex. Це прискорить роботу і позбавить вас від помилок декомпилятора. 3. Запускаємо скрипт Script.bat і вибираємо 9-ий пункт Decompile апк. Нам потрібно розпакувати програму і покопатися в файлах res/values. Після розпакування исходники будуть лежати в папці .projectsPhone.апк

Пошуки коду 1. Так як у мене російський інтерфейс. мені потрібна папка з російськими словами .resvalues-ua. 2. На скріншоті з минулої статті бачимо, що у нас є слово «Підключено» і воно явно перебуває в нашій локалізації. 3. Шукаємо файлів наше слово… і не знаходимо ?? 4. У нас є ще іконка у вигляді двох стрілок. пошукаємо її. Йдемо в папку projectsPhone.apkresdrawable-hdpi і бачимо її stat_sys_apn.png. 5. Шукаємо ідентифікатор картинки по її назві.

6. Ми знайшли шістнадцятковий ID картинки 0x7f02007f, що в десятковому у нас 2130837631 (переводиться в виндовом калькуляторі). 7. Тепер у нас є два шляхи: а) взяти classes.dex, сконвертувати його в jar і відкрити в gd-gui; b) скористатися baksmali.jar і розпотрошити Dalvik код (описувалося у першій частині статей). Я віддаю перевагу перший варіант. так як читати зручніше (описувалося в першій статті. я чолі «Розпакування та аналіз оригінального файлу»). 8. Відкривши сконвертувати classes.dex в gd-gui, збережемо наш вихідний код. 9. Зробимо пошук 2130837631 в наших основи:

10. там же в gd-gui йдемо дивитися що це за код.

showMobileDataConnected

11. Так як це просто метод, то значить він кудись викликається. Давайте пошукаємо.

12. Відкриваємо в jd-gui файл comandroidphonePhoneApp.java і розуміємо що виклик у нас спрацьовує у наступному блоці

FEATURE_APN_CONNECTION_NOTIFICATION

Модифікація коду Ми звичайно можемо пересетить змінну HtcFeatureList.FEATURE_APN_CONNECTION_NOTIFICATION, але як я вже говорив, це є поганим тоном жорстко позбавлятися від коду, якщо ви публікуєте прошивки і правильніше буде зробити можливість вибору для користувача. Зрозуміло, якщо ви робите для себе і чітко впевнені, що вам це не потрібно, можна вирізати радикально, але я все ж не раджу. 1. Так як у мене є свій твикер, який зберігає настройки в системній області (про це в майбутній статтею), нам потрібно на початку цього блоку зробити перевірку щось на кшталт:

Чому саме такий код? Я його просто підглянув кількома рядками вище:

нам же треба подивитися значення налаштування з іншої змінної. 2. Все, ми знайшли що нам потрібно і тепер готові писати свій сподобався. Даємо команду java -Xmx512m -jar baksmali.jar -a -d -o-Phone -x Phone.апк

— це API версії Android. Для JB — це 16 — папка, де знаходяться всі фреймворки прошивки.

У моєму випадку це була команда java -Xmx512m -jar baksmali.jar -a 16 -d S:devAndroidAndroid-KitchenWORKING_JB_15systemframework -o-Phone -x Phone.apk 3. У нашій знову створеній папці з’явилася папка Phone, а в ній наші файли з Dalvik кодом. 4. Відшукуємо файл по дорозі comandroidphonePhoneApp.java і дивимося код:

5. Тепер після цього рядка нам треба вставити нашу власну перевірку. Я знайшов аналогічний код де перевіряється налаштування preferred_tty_mode. Нам нічого не варто його взяти і скопіювати собі, помінявши назву налаштування і не беручи перші дві службові рядки

preferred_tty_mode

Короткий опис статті: classes.dex що це

Джерело: Модифікація стічних прошивок для Android. Частина 4 / Хабрахабр без ката / Блоги промисловості на Complexdoc

Також ви можете прочитати