- adding `framework.jar` in android studio
- What is framework.jar
- Adding it to Android Studio
- Adding it to app/libs
- Adding it to dependencies
- Adding app.iml modifying gradle script
- Force to refer framework.jar during Java compile
- Result
- Android system framework jar
- Модификация стоковых прошивок для Android. Часть 1
- Преамбула
- Подготовка среды
- Преобразование прошивки
- Непосредственно модификации
- Эпилог
adding `framework.jar` in android studio
This post is part of another post dealing with how to let Android Studio work with a custom android framework where modifications have been made in the AOSP tree.
What is framework.jar
I do not have the full grasp of this jar file. BTW, a jar file is a Java archive format which may contain whatever resources. In the case for framework.jar , it would be a huge set of classes.
After an AOSP full image build, a framework.jar file can be found in the /system/framework directory in the output files. However, in my case the framework.jar was an empty file that contained nothing. This can be checked with the jar tf [jar file] command like the example below:
I am not sure if other AOSP builds might create a framework.jar file that may actually contain something. If so, then I believe you do not have to read the rest of this section.
Clearly, the /system/framework.jar is not the framework.jar file that I am looking for. After many googling, one result pointed me to checkout the intermediary files that are saved in the /out directory. I found a jar file that looked promising and it was /out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar .
listing the contents of this jar file proved that it indeed contained the class that had been custom modified.
One questions that may rise is why is it not named framework.jar but classes.jar ? According to the google result, the classes.jar file is the file which will be renamed/transformed to framework.jar . There may be some minor changes applied to the classes.jar but it is not critical in which the android studio will not be able to understand.
Adding it to Android Studio
An android studio project has been created with the following tree structure.
Adding it to app/libs
The classes.jar file has been copied to app/libs directory and renamed to framework.jar .
Adding it to dependencies
In Android Studio after opening the project, go to File — Project Structure . In the pop-up window, go to Dependencies tab.
Click the + icon on the right to add a new dependency. Click Jar Dependency . Navigate and select app/libs/framework.jar file.
In the newly added libs/framework.jar entry, change the Scope to provided .
Click OK to save the changes.
The procedure above will allow the project to recognize the custom framework.jar . Then the question is which one will the project reference? Will it reference our custom framework.jar or will it reference to the official default SDK? Unfortunately, the project will still refer to the default SDK. The next step will take care of this problem.
Adding app.iml modifying gradle script
The main problem we now face is telling the project to reference framework.jar first instead of the default SDK. The hierarchy of referencing is written in app.iml file located in /app directory. Take a look and one can recognize a group of orderEntry items at the bottom of this file. The order of these orderEntry s defines which one to refer first over the other. We can see that the framework.jar entry is placed below the Android SDK entry.
We need to make sure that the framework entry is placed above the Android SDK entry. A gradle script can be added to the module’s build.gradle to make sure of this. In the module’s build.gradle , please add the following snippet:
Based on observation, a gradle sync or typical build will call preBuild directive. This will execute the snipped above (probably at the last moment due to the doLast command). The code will read the app.iml , save the orderEntry that contains the Android SDK, removes it from the iml file, add a new orderEntry at the last which is identical to the temporarily saved Android SDK orderEntry to the iml file. Eventually, the Android SDK orderEntry will be placed at the very last, thereby guaranteeing the framework.jar to be referenced first than the Android SDK.
Force to refer framework.jar during Java compile
A few more lines need to be added to the build.gradle file. The following code(not the whole but the part after “please add the following”) will be read during gradle’s configuration phase. What it means is, for the projects including subprojects where this build.gradle resides, all the tasks that are type of JavaCompile will be executed with an additional compiler argument -Xbootclasspath/p:app/libs/framework.jar . The reason why this code is necessary is self explanatory.
Result
After gradle sync, the “cannot resolve method” error has vanished.
And although I do not have a screenshot, the build of .apk file is successful too.
Источник
Android system framework jar
Сообщение отредактировал sasha9182 — 04.02.21, 23:20
Ну же,мне нужна ваша помощь.Я опустил руки и смирился с тем что наши телефоны плохо дружат с градиентами.Ещё service.jar нужно разбирать,и редактировать там classes.dex,чего я не умею.
Сообщение отредактировал Димар — 01.02.16, 10:36
Насчет services.jar и classes.dex посмотри как я делал
а насчет градиента сам ничего толкового не добился.
Сообщение отредактировал sk0t — 20.08.14, 17:56
sk0t,
спасибо,нашел уже,и мне кажется что там не все.хочу заменить цвет текста на кнопке,и он видимо хранится в фреймворке,в файле btn_default.xml.но он не хочет открываться,или я не правильно его вытащил.просто как из архива.
фреймворк не хочет распаковываться.
Сообщение отредактировал 12enie — 28.10.10, 22:35
Сообщение отредактировал sk0t — 29.10.10, 00:12
Извини что не по теме не много, я редактирую LauncherProPlus, всё бы ничего вот только пересобранный файл launcher.xml в папке /res/layout-port/ не даёт лаунчеру запустится вылетая в ФК, может у тебя есть решение проблемы? Был бы очень благодарен!
Сообщение отредактировал Димар — 15.01.16, 20:25
Простые вопросы:
apk подписан?
что менялось в файле?
пересобран означает — разобран с помощью apk-tool, отредактирован, и собран с помощью apk-tool?
ещё по умолчанию собранный файл находится в папка куда распаковывался apk/dist и называется out.apk
Сообщение отредактировал sk0t — 29.10.10, 16:50
java -jar apktool.jar d -s file.apk foldername
tools.zip ( 1.13 КБ )
в архиве три файла
apktool-d.cmd — переносишь на него apk-файл содержащий классы(classes.dex): разбирает его в папку с тем же именем (phone.apk -> phone)
apktool-d-s.cmd — переносишь на него apk-файл не содержащий классы: разбирает его в папку с тем же именем (framework-res.apk -> framework-res)
apktool-b.cmd — переносишь на него папку с отредактированными файлами: собирает её в apk с именем out.apk (framework-res -> framework-res/dist/out.apk)
соответственно apktool.jar должен быть в той же папке.
2 Rang3r
скинь исходный apk и тот который ФК вызывает
PS 2 12enie
открываешь файл framework-res\res\values\styles.xml
ищешь там примерно такое (btn_default)
а здесь уже задается сам цвет
Первые два знака — прозрачность, остальные шесть — цвет в RGB
#ff000000 — ff — непрозрачный, 000000 — черный
можно изменить в любом из файлов
Сообщение отредактировал sk0t — 29.10.10, 20:35
sk0t, скинул в ЛС. Ответить можно и здесь, может кому-нибудь ещё тоже пригодится ответ :happy:
Сообщение отредактировал Rang3r — 29.10.10, 20:59
Источник
Модификация стоковых прошивок для 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.
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 и смотрим код:
9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
10. Самый простой способ спасти отца русской демократии, это изменить код на следующий:
, то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как
11. Да, метод ,будет работать. Но мы же не ищем легких путей — это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде
12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.
Создание Dalvik кода
1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду
8. Все, код для патчинга готов.
Накатывание патча
1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
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 доступ:
1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.
2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
Эпилог
Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.
К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.
Источник