2012-05-18 2 views
4

Я внес незначительные изменения в su-binary (https://github.com/git-core/su-binary), добавляя цель для установки SUID. Android.mk я использую: http://pastebin.com/N0gMJT4u При запуске сделать в корне дерева исходного кода Android, все прекрасно работать:Как работает зависимость от модуля в Android?

$ make -j5 
[...] 
system/core/rootdir/Android.mk:42: warning: ignoring old commands for target `out/target/product/panda/root/init.rc' 
echo "Setting SUID/GUID to su-binary" 
Setting SUID/GUID to su-binary 
Installing busybox 
chmod ug+s out/target/product/panda/system/xbin/su 
[...] 

При запуске mm -B во внешнем/су-двоичную: http://pastebin.com/8HmUJBA0 такое же поведение для mmm external/su-binary

Согласно https://groups.google.com/forum/#!msg/android-building/dtNZFj5pe1w/PRY2MXADXG4J

Помимо «сделать имя-модуля», как предложил Ин Ван, вы можете запустите «мм» внутри каталога, чтобы построить (и установить) все модули, определенные . Тем не менее, это будет строить только эти модули, любые зависимые модули будут не. Следовательно, это полезно только для инкрементных сборок существующих деревьев, где вы отслеживаете зависимости.

Пытался что:

$ rm out/target/product/panda/system/xbin/su 
$ make external/su-binary 
[...] 
make: Nothing to be done for `external/su-binary'. 

$ rm out/target/product/panda/obj/EXECUTABLES/su_intermediates/su 
$ make external/su-binary 
[...] 
make: Nothing to be done for `external/su-binary`. 

Как работает модуль зависимостей в Android?

+1

Спасибо за проголосовать, не комментируя, я оценил ... –

ответ

4

Хорошо, я получил это работает, изменяя Android.mk:

  1. имя по $(SU_BINARY) цель по-разному, т.е. $(SU_BINARY)-post. Лучше, чем раньше, он имеет то же имя, что и цель, определенная комбинациями LOCAL_MODULE и BUILD_EXECUTABLE.
  2. поставить эту цель перед include $(BUILD_EXECUTABLE)

Это выглядит как:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE := su 
LOCAL_SRC_FILES := su.c db.c activity.cpp 

SU_SHARED_LIBRARIES := liblog libsqlite 
ifeq ($(PLATFORM_SDK_VERSION),4) 
    LOCAL_CFLAGS += -DSU_LEGACY_BUILD 
    SU_SHARED_LIBRARIES += libandroid_runtime 
else 
    SU_SHARED_LIBRARIES += libcutils libbinder libutils 
    LOCAL_MODULE_TAGS := eng 
endif 

LOCAL_C_INCLUDES += external/sqlite/dist 

LOCAL_SHARED_LIBRARIES := $(SU_SHARED_LIBRARIES) 

LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) 


SU_INSTALL_DIR := $(TARGET_OUT)/xbin 
SU_BINARY := $(SU_INSTALL_DIR)/su 
# taken from busybox-android 
$(SU_BINARY)-post: su 
    @echo "Setting SUID/GUID to su-binary..." 
    chmod ug+s $(TARGET_OUT_OPTIONAL_EXECUTABLES)/su 
    ln -sf $(TARGET_OUT_OPTIONAL_EXECUTABLES)/su $(TARGET_OUT_EXECUTABLES)/su 

ALL_DEFAULT_INSTALLED_MODULES += $(SU_BINARY)-post 

include $(BUILD_EXECUTABLE) 

ALL_DEFAULT_INSTALLED_MODULES это правило, приходит очень поздно после установки модуля я думаю. Но я должен был вникать в это, чтобы проверить, является ли это лучшим решением для того, что я хочу сделать здесь.

+1

Спасибо, что нашли время, чтобы сообщить нам ответ – Basic

+0

привет m-ric, я хотел обсудить аналогичную проблему с u !! Мы можем поговорить?? – Neji

+0

@Neji нажимаем ваш вопрос с образцом кода на SO. Есть большие шансы, что вы получите ответ быстро. –

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