【问题标题】:Android: Include su binary executable in AOSP buildAndroid:在 AOSP 构建中包含 su 二进制可执行文件
【发布时间】:2015-06-16 18:22:09
【问题描述】:

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

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

  1. system/extras/ 中删除 su 目录,并将 su 二进制目录(取自 ChainsDD)包含在 external/ 中。
  2. 使用“LOCAL_MODULE_TAGS := optional”修改文件 system/extras/su/Android.mk 和文件 build/target/product/core.mk 以在 PRODUCT_PACKAGES 中包含 su。

所有这些在su目录下都有su.c、su.h等文件,用于构建su包。

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

请建议并感谢您的宝贵时间。

【问题讨论】:

    标签: android android-source


    【解决方案1】:

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

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

    解决方案 1

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

    PRODUCT_COPY_FILES += \
        prebuilts/su/su:system/xbin
    

    解决方案 2

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

    PRODUCT_PACKAGES += \
        su
    

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

    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)
    

    面临的问题

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

    1. 我在 Solution 1 中的行之后添加了以下内容,它一直给我chmod ... file cannot be found 的错误。

          $(shell chmod 6755 out/<product>/system/xbin/su)
      
    2. 我在 Solution 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
      

    有人可以建议如何chmod 文件吗?感谢您的宝贵时间。

    已解决的问题

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

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

    PRODUCT_COPY_FILES += \
        prebuilts/su/su:system/xbin
    

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

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

    LOCAL_POST_INSTALL_CMD := chmod 6755 $(LOCAL_MODULE_PATH)/$(LOCAL_MODULE)
    

    【讨论】:

    • 您也可以让它在您的 init.xxxx.rc 文件中执行 chmod。它将确保您每次启动时都正确无误。
    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 2013-08-26
    • 2018-06-29
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多