Android.mk prebuild

本文介绍了一个用于构建Android平台音视频处理预编译库的方法,通过定义宏指令检查文件并添加必要的库文件,实现ffmpeg-neon库的集成。此过程涉及到脚本编写、模块名称定义及预编译库的安装。
LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)
#include $(SDK_DIR)/Android.def


define hisdk_check_file_print
$(foreach var,$(1),\
  $(shell test ! -f $(LOCAL_PATH)/$(var).so || echo $(var)) \
)
endef


define addsuffix_so_list
$(addsuffix .so, $(1))
endef


LOCAL_SRC_PRELIBS := libffmpeg-neon


LOCAL_MODULES_NAME := $(call hisdk_check_file_print, $(LOCAL_SRC_PRELIBS))
LOCAL_PREBUILT_LIBS := $(call addsuffix_so_list, $(LOCAL_MODULES_NAME))
ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULES_NAME)


LOCAL_MODULE_TAGS := optional
include $(BUILD_MULTI_PREBUILT)
out/soong/Android-bananapi_r2pro.mk was modified, regenerating... [100% 1/1] initializing build system ... device/rockchip/common/prebuild.mk:2: warning: Generating manifest snapshot at out/commit_id.xml... device/rockchip/common/prebuild.mk:3: warning: You can disable this by removing this and setting BOARD_RECORD_COMMIT_ID := false in BoardConfig.mk [ 2% 6/273] including build/make/target/board/Android.mk ... build fstab file with device/rockchip/common/scripts/fstab_tools/fstab.in.... rebuilding dtbo image for multi dtbo used.... build parameter.txt with device/rockchip/common/scripts/parameter_tools/parameter.in.... [ 23% 63/273] including external/rk_tee_user/v2/Android.mk ... 'building rk_tee_user v2' [ 45% 124/273] including hardware/rockchip/camera_engine_rkisp/Android.mk ... TARGET_BOARD_PLATFORM=rk356x [ 47% 131/273] including hardware/rockchip/libhwjpeg/Android.mk ... git-b5f7fc75ca author: August 2023-04-24 update README [ 49% 136/273] including hardware/rockchip/omx_il/Android.mk ... date: Unknown option 'R' (see "date --help") cp: .git/hooks/pre-commit: No such file or directory tools/hooks .git/hooks [ 80% 220/273] including vendor/btdiag/src/Android.mk ... FAILED: In file included from tools/tradefederation/core/tests/Android.mk:24: In file included from vendor/btdiag/src/Android.mk:11: In file included from build/core/version_defaults.mk:39: build/make/core/build_id.mk:21: error: cannot assign to readonly variable: BUILD_ID 22:04:41 ckati failed with: exit status 1 #### failed to build some targets (03:15 (mm:ss)) ####
最新发布
08-08
在构建 Android 系统镜像时,如果遇到错误提示 `cannot assign to readonly variable: BUILD_ID`,通常表示尝试对一个只读变量进行了赋值操作。这在 Android 构建配置文件 `build_id.mk` 中较为常见,尤其是在使用较旧的构建系统(如 Android 构建配置工具)时。 ### 错误原因分析 1. **只读变量的定义**:`BUILD_ID` 变量可能在某个全局配置文件中被定义为只读变量,例如通过 `export BUILD_ID=xxx` 的方式声明,或者在构建环境中被预定义为不可更改的常量。 2. **构建配置冲突**:某些 Android 构建脚本(如 `Android.mk` 或 `Android.bp`)可能会尝试修改该变量,从而导致冲突。 3. **构建工具版本限制**:在使用较旧的构建工具链时,部分变量可能被限制为只读,以防止构建过程中的意外修改。 ### 解决方案 #### 1. 检查 `build_id.mk` 文件中的赋值方式 如果在 `build_id.mk` 文件中直接使用了类似 `BUILD_ID = "XXX"` 的赋值语句,可以尝试将其替换为使用 `:=` 或 `+=` 操作符。例如: ```makefile BUILD_ID := "CUSTOM_BUILD_ID" ``` 这将确保赋值操作不会与只读变量定义冲突[^3]。 #### 2. 修改构建环境中的只读设置 如果 `BUILD_ID` 被设置为只读变量(例如通过 `export BUILD_ID=xxx`),可以通过取消只读属性后再赋值: ```bash unset BUILD_ID BUILD_ID="CUSTOM_BUILD_ID" ``` 在构建脚本的早期阶段添加上述命令,可以避免对只读变量的赋值错误。 #### 3. 使用构建配置覆盖机制 Android 构建系统允许通过 `device/` 或 `vendor/` 目录下的自定义配置文件来覆盖默认的 `build_id.mk` 文件。可以创建一个自定义的 `build_id.mk` 文件,并确保其优先级高于默认配置文件。例如: ```makefile # device/your_company/your_device/build_id.mk BUILD_ID := "CUSTOM_BUILD_ID" ``` 这种方式可以避免直接修改系统级配置文件,从而减少冲突的可能性。 #### 4. 升级构建工具链 如果使用的是较旧的 Android 构建工具链,建议升级到最新版本。较新的构建工具链对变量的处理更加灵活,并且修复了部分已知的构建问题。 ### 示例代码 以下是一个修改后的 `build_id.mk` 示例: ```makefile # build_id.mk BUILD_ID := "CUSTOM_BUILD_ID" ``` ### 5. 验证构建环境 在进行上述修改后,重新运行构建命令并检查是否仍然出现错误。例如: ```bash source build/envsetup.sh lunch aosp_arm-eng make -j$(nproc) ``` 如果问题仍然存在,可以检查构建日志以获取更多上下文信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值