模块依赖关系在Android中是如何工作的?

模块依赖关系在Android中是如何工作的?,android,makefile,Android,Makefile,我对subinary()做了一些小修改,添加了一个目标来设置SUID。 我使用的Android.mk: 在Android源代码树的根目录下运行make时,一切正常: $ 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-bin

我对subinary()做了一些小修改,添加了一个目标来设置SUID。 我使用的Android.mk: 在Android源代码树的根目录下运行make时,一切正常:

$ 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
[...]
在外部/su二进制文件中运行
mm-B
时:
mmm外部/su二进制文件的行为相同

除了王颖建议的“命名模块”之外,您还可以 在目录中运行“mm”以构建(并安装)定义的所有模块 那里但是,这将只构建那些模块,任何依赖的 模块将不会生成。因此,它只对增量数据有用 在其中跟踪依赖项的现有树的生成

尝试:

$ 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中是如何工作的?

好的,我通过更改Android.mk来运行它:

  • $(SU\u BINARY)
    目标命名为不同的名称,即
    $(SU\u BINARY)-post
    。更好的是,它与由
    LOCAL\u模块
    BUILD\u可执行文件
    组合定义的目标具有相同的名称
  • 将此目标放在
    include$(BUILD\u可执行文件)
  • 它看起来像:

    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)
    

    所有默认安装的模块
    都是在模块安装后很晚才会出现的规则。但我必须深入研究一下,看看这是否是我想在这里做的事情的最佳解决方案。

    感谢没有发表评论的否决票,我很感激……感谢你花时间让我们知道答案。我想与你讨论一个类似的问题!!我们可以谈谈吗???@Neji用代码示例推送您的问题。你很有可能很快得到答案。