Создание отдельных модулей Android с отключенным dexpreopt

Для моего тезиса я изменяю рамки android и создаю исходный код (4.1.1 Jelly Bean). Я могу сделать полную сборку, но поскольку это очень трудоемкое занятие (я разрабатываю на виртуальной машине ubuntu 12.04 64 бит), я бы хотел создать отдельные модули.

Например: При внесении изменений в модули местоположения должно быть возможно просто создать измененный модуль и создать новый системный образ:

mmm frameworks/base
make snod

Но это не работает. Каждый раз, когда я пытаюсь загрузить, новый системный образ не загружается из-за:

I/dalvikvm( 1696): DexOpt: mismatch dep signature for '/system/framework/framework.odex'

После некоторых исследований я попытался отключить dexpreopt с переменными среды

export $WITH_DEXPREOPT=false 

и

export $DISABLE_DEXPREOPT=true 

и выполните полную перестройку с помощью команды make installclean. Полные работы по восстановлению и изменения в структуре присутствуют в сборке. Но после выполнения нового изменения все еще "mmm frameworks/base" и "make snod" приводят к несоответствию dexpreopt.

Файл build/core/makefile из "make snod" также выдает предупреждение: "Предупреждение: с включенным dexpreopt вам может потребоваться полная перестройка", который поступает из этой строки в make файле:

ifeq (true,$(WITH_DEXPREOPT))
$(warning Warning: with dexpreopt enabled, you may need a full rebuild.)
endif

Это заставляет меня думать, что переменная $WITH_DEXPREOPT неправильно установлена ​​или прочитана? До сих пор я не смог получить загрузочный образ системы без чистой полной перестройки. Является ли процедура правильной, чтобы отключить dexpreopt, или есть ли какие-либо другие способы создания отдельных модулей после внесения изменений в структуру и получения нового образа системы?

Цель сборки - "полный-русский".

Ответ 1

По-видимому, переменная среды WITH_DEXPREOPT перезаписывается внутренней переменной WITH_DEXPREOPT в

build/target/board/generic/BoardConfig.mk

Изменив это на false или в соответствии с людьми из групп google, запустите make с помощью:

make showcommands WITH_DEXPREOPT=false

делает трюк. Создание конкретного модуля и создание нового образа системы теперь приводит к созданию загрузочной сборки.

(источник: https://groups.google.com/d/topic/android-building/vJCkg8Yq9Ic/discussion)