2014-01-04 2 views
15

Я пытаюсь создать свои собственные библиотеки и приложения во внешнем каталоге AOSP, но проблема в том, что я должен запускать make каждый раз, и make будет компилировать/строить весь андроид. В моей внешней папке приложений у меня есть Android.mk файл, но я не могу построить его с помощью NDK-сборки, он будет искать папку JNI и NDK_BUILD_PATH, поэтому вопрос:Как построить часть Android AOSP?

Как я могу построить его без перестройки всей AOSP ?

ответ

9

Простой make вызов не будет перестраивать больше, чем необходимо, но даже с библиотекой листьев или бинарными даже инкрементная сборка может занять несколько минут. Если вы хотите только создать свой конкретный модуль, вы можете посмотреть на функции, кратко описанные в верхней части build/envsetup.sh. В частности, функции оболочки m и mm должны быть полезными, поскольку они только строят один или несколько модулей, не заботясь об их зависимостях и даже не пытаясь прочитать все файлы Android.mk, найденные в дереве. Использование их должно значительно ускорить наращивание (но все зависимости должны были быть построены в какой-то момент, т. Е. Они только полезны для инкрементных построений).

build/envsetup.sh также определяет ряд других функций оболочки, полезных для построения платформы Android и работы с исходным кодом.

+0

Да, боль сделать не восстанавливает все, конечно, но ваше предложение верное. Я буду принимать его как правильный ответ. Спасибо. –

+5

Я хотел добавить к вашему комментарию следующее: - croot: Изменяет каталог в верхней части дерева. - m: Делает из верха дерева. - mm: Создает все модули в текущем каталоге. - mmm: Создает все модули в поставляемых каталогах. - cgrep: Greps на всех локальных файлах C/C++. - jgrep: Greps во всех локальных файлах Java. - mgrep: Greps на всех make-файлах - resgrep: Greps во всех локальных файлах res/*. Xml. - godir: перейдите в каталог, содержащий файл - printconfig: сообщает вам, какая конфигурация вы сейчас building –

+0

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

9

Вы можете получить список всех модулей в вашем Android код с помощью следующей команды:

make modules 

Для создания какого-либо одного модуля:

make [modulename] 
+0

Если мы хотим скомпилировать только приложение или библиотеку, нам все равно нужно загрузить (rsync) весь AOSP? – ransh

3

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

Предположим, вы внесли изменения в SystemUI, который является специализированным приложением, которое является ключом к общей функциональности Android. Это часть репозитория frameworks/base.

Если вы просто заходите в каталог фреймворков/основ и выполняете mm, он ничего не найдет, чтобы ваши изменения были проигнорированы.

Чтобы на самом деле подобрать ваши изменения с помощью mm, вы должны находиться в каталоге, в котором они находятся - в этом примере вам нужно быть в рамках/base/packages/SystemUI. Соответствующее место для других кодовых баз будет отличаться - но как угадывание, вам, вероятно, должно быть место, где находится Android.mk, охватывающее ваши изменения.

Вы можете либо использовать make snod мишень из верхней части дерева, чтобы восстановить system.img и прошить с FastBoot, или использовать adb remount, ADB новый толчок SystemUI.apk, а затем adb shell "start; stop" перезапустить Android рамки ,

Смежные вопросы