Android:在AOSP构建中包含su二进制可执行文件

use*_*168 5 android android-source

在从源代码构建Android之后,我一直在尝试在/out/.../system/xbin/su中包含su二进制文件.我有su二进制文件(来自Chainfire)作为可执行文件,但我似乎无法将它包含在AOSP构建中.

我遇到的所有示例或解决方案都在Android_Source_Root中讨论了以下内容:

  1. 删除su目录system/extras/并在外部/中包含su-binary目录(取自ChainsDD).
  2. system/extras/su/Android.mk使用" LOCAL_MODULE_TAGS:= optional " 修改文件,并build/target/product/core.mk在PRODUCT_PACKAGES中包含su 文件.

所有这些都在su目录中有su.c,su.h和其他文件,用于构建su包.

我想知道的是当我有"su二进制可执行文件"而不需要包含su.c或任何这些文件时,如何在AOSP构建中包含su?我应该在哪里放置su目录以及Android.mk文件的内容是什么?

请建议并感谢您的时间.

use*_*168 7

我设法解决了我提到的问题.以下是我解决问题的两种方法,但我遇到了"问题面临"标题中解释的另一个问题.

*注意:我把su二进制文件放在prebuilts/su中

解决方案1

我修改了device/目录中的device.mk文件.我在文件中添加了以下内容.

PRODUCT_COPY_FILES += \
    prebuilts/su/su:system/xbin
Run Code Online (Sandbox Code Playgroud)

解决方案2

我修改了device/目录中的device.mk文件.我在文件中添加了以下内容.

PRODUCT_PACKAGES += \
    su
Run Code Online (Sandbox Code Playgroud)

然后我添加并将以下内容插入到Android.mk文件中prebuilts/su/su.

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

LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := su
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_CLASS := EXECUTABLES

LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_UNSTRIPPED_PATH := $(LOCAL_MODULE_PATH)

include $(BUILD_PREBUILT)
Run Code Online (Sandbox Code Playgroud)

问题面临

将二进制文件复制到system/xbin目录后,我无法对其进行chmod .我尝试了以下几种方法,但没有产生任何结果.

  1. 我在解决方案1中的行之后添加了以下内容并且它一直给我错误chmod ... file cannot be found.

        $(shell chmod 6755 out/<product>/system/xbin/su)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我在解决方案2 Android.mk文件中添加了以下内容,include $(BUILD_PREBUILT)但没有更改文件的权限.

    #Trial 1.
    SU_BINARY := $(LOCAL_MODULE_PATH)/su
    $(SU_BINARY)-post: su
        $(shell chmod 6755 $(LOCAL_MODULE_PATH)/su)
    
    #Trial 2 without "-post".
    SU_BINARY := $(LOCAL_MODULE_PATH)/su
    $(SU_BINARY): su
        $(shell chmod 6755 $(LOCAL_MODULE_PATH)/su)
    
    #Trial 3.
    SU_BINARY := $(LOCAL_MODULE_PATH)/su
    $(SU_BINARY): su
        chmod 6755 $(LOCAL_MODULE_PATH)/su
    
    Run Code Online (Sandbox Code Playgroud)

有人可以请教如何chmod文件?感谢您的时间.

已解决的问题

解决方案1(针对问题1)

首先更改文件的权限chmod 6755 prebuilts/su/su.在device/目录中的device.mk文件中包含以下内容.

PRODUCT_COPY_FILES += \
    prebuilts/su/su:system/xbin
Run Code Online (Sandbox Code Playgroud)

解决方案2(针对问题2)

只需将以下内容添加到Android.mk文件中即可 include $(BUILD_PREBUILT)

LOCAL_POST_INSTALL_CMD := chmod 6755 $(LOCAL_MODULE_PATH)/$(LOCAL_MODULE)
Run Code Online (Sandbox Code Playgroud)