(Android Firmware Construction Kit)
AFCK это набор скриптов, используемых для (пере-)сборки прошивок ОС Android. Целью данного набора является изготовление тюнингованных прошивок, используя готовую прошивку производителя в качестве основы.
В настоящий момент данные проект может использоваться для сборки прошивок под следующие устройства:
- Android TV приставка X96 Max
Для (пере)сборки прошивки используется сценарий для программы GNU Make и набор POSIX-совместимых утилит. Наберите "make" без параметров чтобы получить описание целей, которые можно собрать сценарием.
Файлы, из которых собирается прошивка, не входят в GIT. Они слишком большие, и они часто меняются. Вам придётся найти их в сети самостоятельно. При запуске make Вам сообщат имена отсутствующих файлов.
Можно попробовать запустить файл сценария ingredients/01-get-it-all. Он попытается скачать необходимые файлы из сети. Это не обязательно получится т.к. ссылки на подобные ресурсы могут часто изменяться.
Вам необходимо установить свежий apktool отсюда: https://bitbucket.org/iBotPeaches/apktool/downloads/
Создайте скрипт apktool, который будет запускать java -jar apktool-версия.jar $*
. Если Вы раньше устанавливали в apktool файлы фреймворка, очистите его:
apktool empty-framework-dir --force
Система сборки имеет встроенную систему помощи. Запуск make
без параметров выведет полный список целей для сборки. Чтобы инициировать сборку любой цели, запустите make <цель>
. Чтобы не захламлять основной экран помощи, многие дополнительные цели находятся на отдельных экранах. Для вывода дополнительных экранов помощи, наберите make help-<экран>
, список имеющихся дополнительных экранов приведён на основном экране помощи, например, make help-mod
выведет список целей для накладывания модификаций на распакованную прошивку.
Переменная TARGET
задаёт целевую платформу прошивки, например, TARGET=x96max/beelink
задаёт сборку прошивки под аппаратную платформу x96max на базе прошивки beelink. Значение переменной TARGET задаётся либо в Makefile верхнего уровня, либо может быть переопределено в файле local-config.mak, который необходимо создать самостоятельно.
Чтобы собрать конечные файлы из исходных, запустите команду make deploy
. Если всё пройдёт успешно, Вы получите конечные файлы дистрибутива в подкаталоге out/$(TARGET)/deploy/.
Если что-то не получается, можно собирать прошивку шаг за шагом. Сперва попробуйте просто распаковать исходную прошивку: make img-unpack
. Затем накладываем модификации, либо все сразу командой make mod
, либо по одной, используя названия целей из make help-mod
. В конце можно собрать файлы прошивок: make ubt-img
и make upd
. После этого остался один маленький шажок: make deploy
и конечные файлы готовы.
Все модификации находятся в отдельных каталогах внутри подкаталога целевой платформы build/$(TARGET)/
(например, build/x96max/beelink/). Каждая модификация находится в своём индивидуальном подкаталоге.
Если Вы разрабатываете свою модификацию, Вам необходимо:
-
Создать подкаталог для модификации внутри каталога build/$(TARGET)/. В принципе, название может быть любым, но принято составлять название из двух цифр, тире и названия модификации. Число в начале названия подкаталога помогает отсортировать подкаталоги по порядку обработки, таким образом, модификации с более высоким номером могут пользоваться переменными, заданными модификациями с более низкими номерами.
-
Создать в нём файл
название-модификации.mak
, в котором определить необходимые правила наложения модификации. Будем называть содержимое этого файла правилами модификации.
Следует учитывать, что все файлы с правилами модификации загружаются в единое пространство имён. Это значит, что если Вы определите переменную с определённым названием в одном файле, а затем переменную с таким же названием в другом файле правил модификации, второе присваивание отменит первое и модификация может произойти не так, как Вам этого хочется. Поэтому, если вводите дополнительные переменные в правила модификации, используйте название модификации как основание для название переменной. Например, если Ваша модификация называется boom
, используйте названия переменных вида BOOM_APK
, BOOM_FILES
и так далее.
Единственное исключение делается для переменных с фиксированными именами, которые задают каким именно образом будет накладываться модификация:
HELP
содержит описание модификации. Этот текст выдаётся пользователю по командеmake help-mod
.DISABLED
- если эта переменная получает непустое значение, мод будет выключен. Данную переменную можно использовать для временного отключения определённых модов (без необходимости удалять или переименовывать файл .mak).INSTALL
содержит, собственно, последовательность инструкций по накладыванию модификации на распакованный образ.MOD
содержит название модаDIR
содержит название подкаталога мода. Используйте для доступа к дополнительным файлам, например$(DIR)/boom.apk
и так далее.DEPS
содержит список файлов, от которых зависит мод. При изменении любого из этих файлов система сборки сочтёт, что мод необходимо переналожить. По умолчанию в переменнуюDIR
добавляются все файлы из подкаталога мода (но не из вложенных подкаталогов)./
- переменная с таким смешным названием очень полезна, т.к. содержит базовый каталог, в котором находятся распакованные образы файловых систем. В GNU Make переменные с названием из одного символа можно не брать в круглый скобки:$/
эквивалентно$(/)
. Используйте эту переменную для удобной работы с файлами распакованного образа, например:cp $(DIR)/boom.apk $/system/app
Также для некоторых задач существуют полезные функции, которые можно вызвать:
$(call IMG.UNPACK.EXT4,<раздел>)
создаст зависимость текущего мода от распакованного образа указанного раздела. Наприемр,$(call IMG.UNPACK.EXT4,system)
создаст такую зависимость, чтобы перед началом наложения мода разделsystem
уже был распакован в каталог$/
, таким образом, Вы сможете сразу писать правила видаrm $/system/build.prop
и т.п. Если не вызвать этой функции, существование подкаталога$/system
не гарантируется на момент начала выполнения правил мода, особенно при многопоточной сборке.$(call MOD.APK,<раздел>,<файл.apk>,<описание>)
создаёт полный набор правил для установки APK файла в подкаталог app/ указанного раздела (обычно system или vendor). Простейший мод для добавления определённого приложения может состоять из одной строки вызова этой функции.
В принципе, сказанного выше должно хватать для начала работы. Если же возникнет желание узнать подробнее, как работает систему сборки изнутри, см. следующий раздел.
Работа системы сборки подробнее описана в файле doc/HOWITWORKS.md. Если что-то пошло не так, или Вы собираетесь разрабатывать на базе afck, рекомендуем этот файл к прочтению.