Пользователь
0,0
рейтинг
2 июня 2013 в 16:37

Разработка → Модификация стоковых прошивок для Android. Часть 1 из песочницы

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

Несколько лет назад, когда я впервые познакомился с Android, я услышал от своего коллеги по работе, что Android предусматривает возможность установки модифицированных или самодельных прошивок. Признаться, тогда я был далек от этого. И даже пол года назад меня едва интересовали подобные вещи. Глубоко в душе, я был уверен: то, что делает производитель, уже предназначено для нормального использования.

Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google — я взял с себя обещания обязательно разобраться во что бы мне это не стало.

Прошло пол года и мои кастомные прошивки с успехом используются по всему миру.

В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.

Преамбула


И так! Давайте сперва определимся с понятиями, которые будут использоваться в данной статье. Ваше привычное понимание, при этом, может сильно отличаться.

Патч — изменение или замена существующего программного кода с целью модификации алгоритма программы.
Мод — как правило, добавление дополнительного функционала в существующий программный код без изменения алгоритма.
Твик — усовершенствование функционала программы с целью облегчения доступа к параметрам системы.

Также хочу заметить, что все примеры будет взяты для телефона HTC, но это не значит, что данная информация не может быть использована на других телефонах.

Обращаю ваше внимание, что я, как автор, не несу ответственности за возможную потерю данных на вашем телефоне в результате использования информации ниже.

Подготовка среды


Обойдусь без подробных инструкций как пользоваться тем или иным программным обеспечением. Если вам интересна данная статья и вы дочитали до этих строк, то я надеюсь, что вы уже опытный пользователь и имеете опыт использования, ну или хотя бы экспериментирования в данной области. Инструкций, статей и результатов тестирования полно в открытом доступе, впрочем, как и на Хабре. Также обойдусь без описания некоторых терминов, иначе статья получится очень большой и нудной. Будем писать только по делу. Уверен, что среда у вас уже давно стоит. Если нет, то предлагаю скачать и установить.

1. Android SDK. Это среда разработки приложений для Андроид. Для того чтобы делать модификации, нам обязательно придется проверять наш программный код. Среда разработки самое лучшее, что мы можем использовать.
2. Android Kitchen. Данная утилита позволит вам работать с образами системных партиций официальной ну или неофициальной прошивки.
3. JD-GUI. Декомпилятор программного кода языка Java. Сразу отмечу, что это самый лучший декомпилятор в плане удобства использования.
4. DJ Java Decompiler. Еще один декомпилятор, или дизассемблер, как некоторые любят называть, программного кода языка Java. Не удобен в плане использования, но разбирает код, который иногда не понимает JD-GUI.
5. smali. Еще один дизассемблер, но уже dalvik кода. smali нужен для дизассемблирования, а backsmali ассемблирования кода.
6. dex2jar. Утилита для конвертации исполняемых файлов Dalvik кода.

Преобразование прошивки


Разумеется, прошивка, которая стоит у вас на телефон от производителя оптимизирована с целью сокращения энергопотребления. Для того чтобы прошивку можно было изменять, ее необходимо преобразовать в формат, позволяющий изменять код. Для этого используется Android Kitchen. Можно конечно и руками, как я и делал раньше, пока не нашел эту самую «кухню». Как вытаскивать системную область из телефона, устанавливать среду, делать DEODEX прошивки, вы можете прочитать в интернете. Если вам уже ничего не понятно, я думаю стоит повременить со статьей, пока вы не наберете достаточно опыта.

После того, как прошивка из оптимизированного вида (ODEX — оптимизированный dalvik исполняемый код, если мне не изменяет память) стала DEODEX (то бишь НЕ оптимизированной), все исполняемые файлы готовы к модификации.

Непосредственно модификации


Создание патчей

Как я уже и рассказывал, мой телефон изначально имел запрет на использование Google. Ну хоть ты тресни, на Playstore не зайти, учетную запись не настроить, телефонная книга толком не синхронизируется. Зачем нужен такой Android? Долго копаясь в логах (logcat) самого устройства, я нашел записи, которые говорили о том, что использование Google запрещено. Самое не удобное в Android, вы видите лог, но не знаете какое системное приложение его производит. Чтобы отыскать от куда ноги растут, мне пришлось распотрошить все системные приложения до дизассемблированного Java кода. Это заняло достаточно времени, но я до сих пор пользуюсь проделанной работой при анализе и поиске нужного кода. Этапы получения подобного инструментария следующие:
1. Сделать DEODEX всей прошивки
2. Вашу новую DEODEX прошивку надо будет собрать и прошить на телефон. Как это делается — тема другой статьи.
3. Из каждого файла, находящегося в /system/framework вытащить файл classes.dex и переконвертировать в JAR посредством dex2jar.
4. Каждый полученный JAR открыть в JD-GUI и пере-сохранить в исходный код
5. Распаковать исходный код из архива.

В итоге у меня получилось столько папок, сколько было JAR файлов в /system/framework, и каждая папка имела структуру исходных кодов Java.
Путем несложных манипуляций, я быстро отыскал то место, которое генерировало записи в logcat.

Не будем рассматривать всю логику запрета, так как для каждого случая это отдельная история. Мне пришлось потратить пару часов, прежде чем я нашел где производятся проверки, построить в голове блок схему алгоритма и понять куда надо лезть, чтобы алгоритм чуть чуть «попортить».

Оказалось все просто. Есть подпрограмма, которая на основе заранее установленных констант, при обращении отвечала, относится ли телефон к Китаю или же нет.

Код находился в файле HTCExtension.jar, а класс, который содержал данную подпрограмму находился в \com\htc\util\contacts\BuildUtils$Customization.java

Распаковка и анализ оригинального файла

1. Сперва нам надо взять оригинальный DEODEX JAR файл, который отвечает за нужную нам часть кода. В нашем случае HTCExtension.jar.
2. Открыть любым архиватором и вытащить от туда classes.dex
3. С помощью конвертера dex2jar преобразовать его в JAR файл. Команда: dex2jar.bat classes.dex
4. Открыть полученный classes_dex2jar.jar файл в JD-GUI.
5. Да, чаще всего JD-GUI декомпилирует код не так как он выглядит в оригинале, оно и понятно, но читать вполне можно. В исходнике мы видим, что подпрограмма проверяет параметры проекта и языковой флаг прошивки. В нашем прискорбном случае возвращается значение TRUE.
    public static boolean isChina()
    {
      if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23));
      while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27))
        return true;
      return false;
    }

6. Чтобы сделать патч, нам надо дизассемблировать сам Dalvik код. Для этого используем baksmali. Удобнее всего создать отдельную папку и положить туда три файла вместе: HTCExtension.jar, smali.jar и baksmali.jar. Даем команду java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

- это API вашей версии Android. Для JB - это 16
- папка, где находятся все фреймворки прошивки.

В моем случае это была команда
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar

7. В нашей вновь созданной папке появилась папка HTCExtension, а в ней наши файлы с Dalvik кодом.
8. Отыскиваем файл по пути \com\htc\util\contacts\BuildUtils$Customization.java и смотрим код:
.method public static isChina()Z
    .registers 3

    .prologue
    const/4 v0, 0x1

    .line 276
    sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S

    const/16 v2, 0xd8

    if-eq v1, v2, :cond_13

    sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S

    const/16 v2, 0xda

    if-eq v1, v2, :cond_13

    sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S

    const/16 v2, 0x17

    if-ne v1, v2, :cond_14

    .line 297
    :cond_13
    :goto_13
    return v0

    .line 283
    :cond_14
    sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S

    if-ne v1, v0, :cond_1d

    .line 285
    const/4 v1, 0x2

    sget-short v2, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_LANGUAGE_flag:S

    if-eq v1, v2, :cond_13

    .line 291
    :cond_1d
    sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S

    const/16 v2, 0x1b

    if-eq v1, v2, :cond_13

    .line 297
    const/4 v0, 0x0

    goto :goto_13
.end method

9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
    .prologue
    const/4 v0, 0x1
происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
    .line 297
    const/4 v0, 0x0

    goto :goto_13 

10. Самый простой способ спасти отца русской демократии, это изменить код на следующий:
    .prologue
    const/4 v0, 0x0
, то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как
    public static boolean isChina()
    {
      if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23));
      while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27))
        return false;
      return false;
    }

11. Да, метод ,будет работать. Но мы же не ищем легких путей - это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде
    public static boolean isChina()
    {
      return false;
    }

12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.

Создание Dalvik кода

1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
package ru.habrahabr.test;

public class test
{
	public static boolean isChina()
	{
		return false;
	}
}


3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду
java -Xmx512m -jar baksmali.jar -a  -d  -o test -x test .apk
6. Мы дизассемблировали только что собранное приложение в Dalvik код.
7. Открываем наш файлик test.smali и видим там код
.method public static isChina()Z .registers 1 .prologue .line 7 const/4 v0, 0x0 return v0 .end method

8. Все, код для патчинга готов.

Накатывание патча

1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
.method public static isChina()Z
    .registers 1

    .prologue
    const/4 v0, 0x0

    return v0
.end method

3. Сохраняем файл. Да, забыл сказать, редактор нужен нормальный, например Notepad++ или EditPlus. Кому какой нравится.

Компиляция и сборка патченного JAR файла

1. С помощью backsmali мы распотрошили наш JAR файл, а теперь его надо собрать обратно.
2. Даем команду java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3. В нашей папочке появляется файлик classes.dex
4. Снова открываем HTCExtension.jar файл архиватором и заменяем в нем существующий classes.dex на наш только что созданный.
5. Все, наш HTCExtension.jar содержит модифицированный программный код.

Замена оригинального файла на патченный

Обычно, для рядовых пользователей создаются специальные скрипты, которые через recovery заменяются. Но нам такое не интересно. Во-первых долго и нудно, во-вторых мы же опытные пользователи и можем себе позволить некоторые тонкости.

1. Заменить текущий рабочий файл можно следующими командами, если у вас уже стоит DEODEX прошивка и имеется root доступ:

adb push HTCExtension.jar /sdcard/HTCExtension.jar
adb shell
su
mount -o remount -rw /system
dd if=/system/framework/HTCExtension.jar of=/system/framework/HTCExtension.jar.back
dd if=/sdcard/HTCExtension.jar of=/system/framework/HTCExtension.jar
chmod 644 /system/framework/HTCExtension.jar
rm /data/dalvik-cache/system@framework@HTCExtension.jar@classes.dex
reboot


1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.

2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
adb shell
su
mount -o remount -rw /system
dd if=/system/framework/HTCExtension.jar.back  of=/system/framework/HTCExtension.jar
rm /data/dalvik-cache/system@framework@HTCExtension.jar@classes.dex
reboot


Эпилог


Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.

К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.

P.S. Если что-то не понятно или смущает, задавайте вопросы - всегда буду рад ответить и пояснить.
Нурлан Муханов @Falseclock
карма
59,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (31)

  • +1
    Это вы так за полгода поднаторели?
    • +1
      ну я имел недюжий опыт написания программ по диззасемблированию ASN.1 кода и написанию патчей под ASA для оборудования Ericsson AXE 10
  • +3
    Как же давно я ждал эту статью на Хабре!
    Жду продолжения :)
    • 0
      именно поэтому я начал писать сей труд, потому что пришлось ко всему приходить методом проб и ошибок
  • +2
    Всегда вызывают уважение разработчики, которые создают альтернативные, лучшие прошивки для сообщества, и в основном бесплатно. К сожалению, не у всех хватает сил поддерживать их долгое время (относится и к прошивкам, и к модам).
    • +2
      Вы совершенно правы. Поддерживать накопленный опыт не хватает времени, поэтому решил поделиться опытом здесь. Мне кажется это самое подходящее место.
  • +3
    В свое время я сознательно выбрал себе новым телефоном Siemens M75 как раз по причине того, что прошивки Сименса патчились вдоль и поперек. Времена популярность Сименс-клаба и базы патчей от Кибаба. Когда пришло время менять телефон, взял HTC Hero — были кастомные прошивки. Всегда привлекал этот факт :)
    Спасибо автору за статью! Будет от чего оттолкнуться, когда появится время самому поковырять стоковую прошивку.
    • +1
      Я искренне надеюсь, что вам этого не предстоит. Я активно начал заниматься кастомами в январе этого года будучи на отдыхе в Тайланде, что чуть было не привело к большому скандалу со стороны моей спутницы ))))
      • 0
        Думаю, что можно подгадать время, когда она будет спать :)
    • 0
      Я по той же причине дважды выбирал фотоаппараты Canon.
  • 0
    А нельзя заменить только некоторые стандартные ресурсы без прошивания (и, желательно, без рутования)? Я хочу переместить в Jelly Bean некоторые картинки (только несколько файлов .png) с Ice Cream Sandwich, такие как скошенный переключатель on/off, зелёные checkbox и radiobutton и синюю подсветку основных кнопок.
    • +4
      рут — это немного другое — предоставление административного доступа к системным файлам.
      Да, без рута можно заменить ресурсы, и довольно легко.
      Для этого надо пересобрать образ ядра, то есть сделать unsecured boot, а затем также заменить оригинальные пакеты модифицированными.
      У меня было в планах написать как это сделать )))
  • 0
    Давно хотел порыться в недрах телефона. Сейчас обладаю HTC Desire. Прошивка RuHD2, в целом ничего так, но есть косяки мелкие. Теперь и самому можно поправить.
    Интересно было бы увидеть следующие статьи:
    1) подробная настройка окружения для работы (под Linux), линки на проверенные временем утилиты. Краткое описание для чего каждая нужна. Своего рода самоучитель по последовательности использования этих утилит. Возможно и отладчик какой опишете, чтобы не сразу кирпич получить… (Может qemu справится с запуском прошивки.)
    2) методы пересборки ядра со своими настройками, способы внедрения нового ядра в прошивку
    3) методы превращения кирпича обратно в живое тело.
    4) odex <-> deodex, список типовых терминов с определениями (чтобы легче было читать специализированные форумы), типовое расположение файлов в ФС андройда. Список твиков, которые можно провернуть «на коленке».

    Ну, для разминки хватит! :)

    PS. за статью спасибо!
    • 0
      Вы хотите все сразу ))). Часть вопросов, которые вы задаете — уже давно были освещены на хабре.
      1) я для того чтобы иметь две или более систем использую Citrix XenClient. Самоучитель? Тут лучше задавать конкретные вопросы.
      2) если вы когда-нибудь собирала ядро из исходников для linux, то вопросы отпадет сам по себе. Тут не расскажешь всего как конфигурировать ядро, как собирать… это практика мой друг.
      3) кирпичи тоже бывают разные. этот как с машиной: чего-то не заводится… А что делали до этого?
      4) вот хорошая ссылка
      • 0
        1) Я имел в виду полный набор. Типа утилита1 — делает odex-deodex(линк), утилита2 — делает то-то (но не рекомендую, ибо есть такие-то косяки) и т.д… В статье у вас есть определенные упоминания, что и как. Я же говорю про обзорную статью: какие утилиты вы пользуете, где взять, зачем нужны. В конкретных командах уже разобраться можно. Просто часто бывает делаешь какую-то муторную работу руками, а оказывается есть для этого отличный инструмент, типа android-kitchen, который вы упомянули в статье.
        2) Да, собирал. И неоднократно. Вопрос больше о порядке загрузки самого устройства, порядка впихивания ядра в прошивку, структуры прошивки в целом. Есть же понятия «загрузчик», «ядро», «система». При включении сразу загрузчик стартует? А есть ли какой-то аналог BIOS на arm-устройствах? Я больше про это спрашивал, какой конфиг задать и как ядро собрать — это действительно вопрос практики.
        3) Что-то в стиле howto… Если сломался так, то просто войдите в режим рекавери и сделайте хард ресет. Если сломался вот так, то по проводу заново вкатите в тело загрузчик. Ммм… Обощу: интересует инфа, куда стоит лезть начинающему прошивкокопателю, а что трогать категорически нельзя (например, загрузчик, какие-то модули системы)?
        4) Спасибо.

        А в целом, хочется видеть статью, благодаря прочтению которой, снизится порог вхождения в прошивкокопание. Хотя, скорее, это будет тянуть уже на более монументальный труд типа книги «Кастомизируем Андроид для чайников».
        • 0
          Спасибо за ваш комментарий.

          Я обязательно опишу все тулзы которыми пользуюсь. Статей будет еще 3-4 как минимум, так как нужно осветить многие нюансы, допустим как снять чистый дамп, как делать unsecured boot, как писать update скрипты и т.п.

          у меня больше дилемма как и в какой последовательности освещать материал. Хочется самого вкусного написать, но оно не будет понятным если не дать какие-то базовые объяснения, а «простыни гладить» не очень хочется.

          Было бы хорошо, если вы напишите что хотите видеть в следующей статье, чтобы первая стала более понятной )))
          • +1
            В первую очередь — порядок загрузки устройства.
            Во вторую — структура прошивки.
            В третью — структура каталогов в андроид. Где что лежит. И что нельзя трогать, чтобы не получить кирпич.
            Может быть, указать какие части прошивки отличаются от девайса к девайсу, а что не меняется.
            Быть может приведете пример, как на скажем в CM10 вкрутить HTC Sence или Sony TimeScape.
            Я бы хотел попробовать тебе на htc desire впихнуть timescape. Было бы интересно.
            Еще у меня есть неиспользуемый n900, туда бы тоже можно было бы андроид вмонстрячить — посмотреть как будет работать. Тем более был какой-то порт на него.
            Кстати, может быть еще поясните, как народ впихивает проприетарные драйвера — как там с бинарной совместимостью?
            • 0
              Может быть еще: как собрать андроид из исходников с нуля…

              Правда, те вопросы, что я вам накидал — хватит на пять статей точно.
              Так что смело начинайте цикл статей! ;)

              PS. всё равно по ходу статей будут возникать новые вопросы.
          • 0
            В майском номере Хакера есть весьма интересная статья почти что в нашу тему. Называется она «Робот на поводке».
            Рекомендую почитать. Рассказывается про использование утилит pm и am, ну и прочих программок в андроиде.
            Кстати, я тут пока игрался с телефоном после прочтения статьи, наткнулся на build.prop. Погуглил — а там, оказывается, внутри много вкусностей спрятано!
  • +2
    Здорово, что появилась эта статья. Уверен, за ней пойдут подобные.

    Только вот у меня серьезный вопрос к вам, автор.

    Я не критикую, а просто спрашиваю, посколько недопонимаю. Вот вы там исправляли какой-то страшный код, похожий на байт-код. А почему нельзя было взять файл джава, который содкржит вот этот код:
    public static boolean isChina()
        {
          if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23));
          while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27))
            return true;
          return false;
        }
    


    заменить в нем тело метода на

    { 
    return false; 
    }


    перекомпилировать файл, запаковать как было и потом запушить?

    Спасибо.
    • 0
      Скомплиированный код Java, как и код многих других языков программирования нельзя декомпилировать в оригинальной состояние. Это не PHP или Perl, тут машинный код. Декомпилировать можно, но результат не всегда будет отображать действительность. С помощью декомпиляции или дизассемблирования можно прочитать логику или алгоритм, но не исходный код. У вас есть допустим Windows 7/8, соответственно вопрос, почему нельзя взять и заменить код на нужный чтобы не требовал активации? Ну потому чьл у вас нет исходников, чтобы взять их скомпилировать и заменить. Единственная возможность — сделать патч.
      • 0
        хм… Ну я думал для виндовс нет исходников, потому что она платная. А андроид же вроде опенсорс… Да? И его исходники раз уж не декомпилировать, то найти можно.

        Разве не так? Например, откуда тогда взялся тот код, что я цитировал

        public static boolean isChina()
            {
              if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23));
              while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27))
                return true;
              return false;
            }
        


        Я конечно может загоняю. Объясните
        • +2
          нет нет нет, все в порядке. спрашивайте.

          Да, сама система Android имеет открытый исходный код, но лицензия, по которой этот код распространяется, разрешает использование его в коммерческих целях. Вы также можете модифицировать открытый код на свое усмотрение, но обязаны предоставить аля ссылку на тот код, который был использован. Но вот свой личный код, вы можете скрыть и не публиковать, так как это ваш интеллектуальный труд и как его публиковать — дело вашего уразумения.
          Поэтому все вендоры предпочитают не публиковать свои авторские разработки.

          код что вы процитировали — как раз таки тот самый случай. Библиотека HTCExtension — это собственная разработка HTC, как дополнение к существующему открытому коду андроида. Его никто не будет публиковать, и открытый код в свободном доступе вы не найдете.

          Единственное, что иногда делают производители — это публикуют исходные коды ядра, для того чтобы разработчики могли делать собственные прошивки.
          • 0
            Спасибо )
            Все встало на свои места… У меня в голове, разумеется )
          • +2
            Исходные коды ядра публикуются, потому что linux под GPL, и общественность давит на компании (а так да, они бы и рады не публиковать). Сам Андроид под лицензией Apache, которая позволяет не делиться модификациями, поэтому всё, что над ядром, HTC не открывает.
  • 0
    Извините, а что за девайс такой без поддержи аккаунта гугла?
    • +3
      Любые телефоны, продающиеся на территории Китая не имею поддержки гугла, точнее имеют, но он запрещен.
      В моем случае это HTC One SU (t528w)
      • 0
        Заказывал с Китая HTC Sensation XE, все работает «из коробки».
        • 0
          В Китае есть такие отстраненные территории как Гон-Конг и Тайвань. На них запреты не распространяются, в отличие от Китая континентального.
  • 0
    У вас в начале раздела «Непосредственно модификации» -> «Создание патчей» ближе к концу речь идет о файле HTCExtension.jar. Но ведь код находится в файле HTCExtension.apk и соответственно команда для использования backsmali тоже должна дергать APK файл, а не JAR.
    Вобщем путаница небольшая получилась видимо.
    Или вы это специально в образовательных целях?
    • 0
      Не совсем… Исполняемый код может быть как в APK так и JAR файлах

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.