Создание конкретного модуля в исходном коде Android
Я работаю над исходным кодом Android, который я скачал с source.android.com.
После полной сборки я прошел этот сайт http://elinux.org/Android_Build_System, где рассказывается о системе сборки Android.
Когда я делаю изменения во внешнем коде/коде webkit и собираю его с помощью
make -j4 libwebcore
компилирует соответствующий файл и обновляет libwebcore.so, и это экономит мне много времени.
То же самое относится к приложениям, а также для создания apks.
Проблема возникает, когда я делаю изменения в рамках и даю команду как
make -j4 framework
не компилирует соответствующие файлы.
Может кто-нибудь помочь мне!
Ответы
Ответ 1
В папке frameworks
содержится много вещей, вы должны быть более конкретными в том, чтобы сообщать, что делать.
Например, я внес изменения:
frameworks/base/cmds/input/src/com/android/commands/input/Input.java
.
Теперь соответствующий файл Android.mk
находится в:
frameworks/base/cmds/input/Android.mk
, который содержит строку: LOCAL_MODULE := input
.
Таким образом, модуль, строящийся из источника, называется input
, поэтому я вызываю:
$ make input
Что перестраивает этот конкретный модуль.
В качестве информации о бонусе вы можете использовать помощник mmm
, и вы можете указать путь к модулю, который будет построен следующим образом:
$ mmm frameworks/base/cmds/input
или используя mm
, который только строит модуль в вашем текущем рабочем каталоге:
$ cd frameworks/base/cmds/input
$ mm
Обычно я использую mmm
в качестве своего предпочтительного инструмента.
Обновление
О, я вижу, вы можете говорить конкретно о модуле под названием framework
Я просто попытался изменить: frameworks/base/core/java/android/app/Dialog.java
и сделать a: make framework
.
Это похоже на то, что перекомпилировать структуру просто отлично. В каком файле вы вносите изменения, прежде чем запускать make framework
?
В ответ на ваш комментарий
Я просто попытался изменить frameworks/base/core/java/android/webkit/WebView.java
. mmm frameworks/base
а также make framework
отлично работает для меня.
Если это не сработает для вас, можете ли вы обновить свой вопрос с дополнительной информацией о том, какую версию для Android вы создаете, какие команды вы вводите точно, и результаты, которые вы видите?
Ответ 2
Вот более подробное описание mm
, mmm
и других удобных функций, предоставляемых источником файла build/envsetup.sh
:
Вызовите . build/envsetup.sh
из своей оболочки, чтобы добавить в свою среду следующие функции:
lunch: lunch <product_name>-<build_variant>
tapas: tapas [<App1> <App2> ...] [arm|x86|mips|armv5] [eng|userdebug|user]
croot: Changes directory to the top of the tree.
m: Makes from the top of the tree.
mm: Builds all of the modules in the current directory, but not their dependencies.
mmm: Builds all of the modules in the supplied directories, but not their dependencies.
To limit the modules being built use the syntax: mmm dir/:target1,target2.
mma: Builds all of the modules in the current directory, and their dependencies.
mmma: Builds all of the modules in the supplied directories, and their dependencies.
cgrep: Greps on all local C/C++ files.
jgrep: Greps on all local Java files.
resgrep: Greps on all local res/*.xml files.
godir: Go to the directory containing a file.
Пожалуйста, проверьте комментарии к файлу build/envsetup.sh
, чтобы увидеть полный список функций.