我对su-binary( https://github.com/git-core/su-binary)做了一些小改动,添加了一个目标来设置SUID. 我使用的Android.mk: http://pastebin.com/N0gMJT4u 在Android源代码树的根目录下运行make时,运行正常: $make
我使用的Android.mk: http://pastebin.com/N0gMJT4u
在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-binary中运行mm -B时:http://pastebin.com/8HmUJBA0
mmm external / su-binary的行为相同
根据https://groups.google.com/forum/#!msg/android-building/dtNZFj5pe1w/PRY2MXADXG4J
Apart from “make name-of-module” as suggested by Ying Wang, you can
run “mm” inside a directory to build (and install) all modules defined
there. However, this will build only those modules, any dependent
modules will not be built. Hence, it’s only useful for incremental
builds of existing trees where you keep track of the dependencies.
试过:
$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_BINARY)目标,即$(SU_BINARY)-post.更好,因为之前它与LOCAL_MODULE和BUILD_EXECUTABLE组合定义的目标具有相同的名称.
>在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是我认为模块安装后很晚才出现的规则.但我要深入研究它是否是我想在这里做的最好的解决方案.
