Не удивительно, что изменение core.jar приводит к перестройке многих вещей. core.jar содержит много / все основные java-классы, такие как Object, String и т. д. Так что каждый другой создаваемый jar / apk на самом деле зависит от core.jar.
С точки зрения make-файла, он не имеет ни малейшего представления о том, что вы изменили в core.jar, и о том, безопасно ли не перестроить все эти другие вещи, которые зависят от core.jar. Он просто видит, что время последнего изменения в core.jar новее, чем во всех других jars / apk, которые зависят от него, поэтому он перестраивает их все.
Однако хитрость заключается в том, чтобы сказать определенно, что вы хотите построить, вместо того, чтобы сказать, что нужно все строить.
Предполагая, что вы уже выполнили полную сборку ранее, вы можете просто сделать
make core snod
Основная цель специально создаст новый core.jar с вашими изменениями, не перестраивая ничего, что зависит от core.jar.
И цель snod (сокращение от systemimage-nodeps) заставит его переупаковать все из out / target / product // system в новый system.img. Это «специальная» цель, которая объявлена в build / core / Makefile.
Как правило, целью конкретного jar / apk является просто имя этого jar / apk без расширения. Кроме того, вы можете посмотреть файл Android.mk для этого модуля и найти имя модуля, которое обычно выглядит как LOCAL_PACKAGE_NAME
или LOCAL_MODULE
, в зависимости от типа модуля.
Для core.jar (по крайней мере, в gingerbread) имя модуля находится в libcore / JavaLibrary.mk (который фактически включен в libcore / Android.mk). Этот файл содержит определения для ряда различных модулей, но первый, с LOCAL_MODULE := core
, является ответственным за сборку core.jar. Остальные, похоже, в основном связаны с тестовыми модулями.