4

SUID を設定するターゲットを追加して、 su-binary ( https://github.com/git-core/su-binary )に小さな変更を加えました。私が使用する 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
[...]

mm -Bexternal/su-binary で実行する 場合: http://pastebin.com/8HmUJBA0mmm external/su-binary

https://groups.google.com/forum/#!msg/android-building/dtNZFj5pe1w/PRY2MXADXG4Jによると

Ying Wang が提案する「make name-of-module」とは別に、ディレクトリ内で「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 でどのように機能しますか?

4

1 に答える 1

4

OK、Android.mk を変更して実行しました。

  1. $(SU_BINARY)ターゲットに別の名前を付け$(SU_BINARY)-postます。LOCAL_MODULE以前は、 andの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モジュールのインストール後、非常に遅くなるルールだと思います。しかし、それが私がここでやりたいことに対する最善の解決策であるかどうかを確認するために、それを掘り下げる必要がありました.

于 2012-05-19T21:56:29.383 に答える