Ответ 1
Предполагая, что вы изменяете вещи под frameworks/base/
, откуда он приходит framework.jar
, шаги, которые я использую:
-
Если у вас уже есть полная сборка, используйте команду
mm
в каталоге, в котором вы изменяете какой-либо код. Это быстрее, чемmmm
, поскольку он еще не компилирует зависимостей структуры. -
Перейдите в каталог
<aosp-root>/out/target/product/<product-name>/system/framework/
и получите элементыframework.jar
иservices.jar
. -
Перейдите в каталог
<aosp-root>/out/target/product/<product-name>/system/lib/
и получите любой файлlibandroid*.so
. -
С уже установленным устройством
adb push *.jar /system/framework/.
-
adb push *.so /system/lib/.
-
Factory reset устройство и перезагрузите его.
Изменения, внесенные в вашу структуру, могут теперь работать. Если ваше целевое устройство - 64 бита, замените lib на lib64 на указанные выше адресаты.
Объяснение
Вышеуказанные шаги будут меняться в зависимости от того, что мы модифицируем в рамках AOSP. Вот краткое описание того, что входит в каждый файл:
-
framework.jar
: API, доступные для приложений -
services.jar
: Реализация менеджеров и системных служб, расположенных вframeworks/base/services
. -
libandroid*.so
: Библиотеки, созданные из собственного кода (C/С++), такие как .cpp файлы, расположенные вframeworks/base/core/jni
.
Но, как правило, каждый Android.mk
внутри фреймворков будет генерировать хотя бы один вывод, названный переменной LOCAL_MODULE
, а тип модуля зависит от следующей инструкции include:
# JAR file
include $(BUILD_JAVA_LIBRARY)
# Library to be used by other modules
include $(BUILD_SHARED_LIBRARY)
# Executables
include $(BUILD_EXECUTABLE)
Например, папка frameworks/base/cmds
генерирует библиотеку Java и исполняемый файл для каждого элемента внутри него, например команду pm
обычно используется для установки приложений через ADB. В любом случае это правило: библиотеки Java переходят к /system/framework/
, общие библиотеки идут в /system/lib/
, а исполняемые файлы идут в /system/bin
.
Более официальную информацию о Android.mk
можно найти здесь, но она не охватывает все переменные и макросы, используемые системой Android Build System, Я получаю большую часть этой информации из самого кода AOSP.
Надеюсь, что это поможет.