Android13中Android.mk和Android.bp预编译多种架构文件

需求:

1, 当前有多个架构的config文件,但是需要不同架构使用不同config文件

2, 必须将config文件拷贝到out/host目录下

常规思路

在Android.bp中, 一般在编译多架构文件时,都会使用arch属性,如例子:

cc_test {

name: "kselftest_breakpoints_tests",

relative_install_path: "linux-kselftest/breakpoints",

srcs: [

"tools/testing/selftests/breakpoints/step_after_suspend_test.c",

],

defaults: ["kselftest_defaults"],

arch: {
arm: {
enabled: false,
},
arm64: {
srcs: [
"tools/testing/selftests/breakpoints/breakpoint_test_arm64.c",
],
},
x86: {
srcs: [
"tools/testing/selftests/breakpoints/breakpoint_test.c",
],
},

},

}

Androd.bp中预编译主要有如下:

复制代码
var prebuiltTypes = map[string]string{
    "SHARED_LIBRARIES": "cc_prebuilt_library_shared",
    "STATIC_LIBRARIES": "cc_prebuilt_library_static",
    "EXECUTABLES":      "cc_prebuilt_binary",
    "JAVA_LIBRARIES":   "java_import",
    "ETC":              "prebuilt_etc",
}

Android.bp相关文档中:

所以可能满足需求的就是:prebuilt_etc_host,但是也没有找到arch属性:

例子:

复制代码
prebuilt_etc_host {
    name: "kernel_config",
    src: "config",
    filename: "config",
    sub_dir: "kernel_config",
}

即使强行加上arch,其实也是不生效的,如:

复制代码
prebuilt_etc_host {
    name: "kernel_config",
    src: "config",
    arch: {
        arm: {
            src: "arm/config",
        },
        arm64: {
            src: "aarch64/config",
        },
        x86: {
            src: "x86/config",
        },
        x86_64: {
            src: "x86_64/config",
        },
    },
    filename: "config",
    sub_dir: "kernel_config",
}

所以只能通过相关模板找解决方法,其中发现了TARGET_PREBUILT_TAG这个变量,这个变量的值可以通过 get_bulid_var获取:

复制代码
 get_build_var TARGET_PREBUILT_TAG
android-x86

也可以是android-arm64, 可以利用这个来进行区分。

解决方法

1,建立目录结构

android-arm android-arm64 Android.bp Android.mk android-x86 android-x86_64

2, Android.bp和Android.mk编写

vim Android.bp

复制代码
subdirs=["*"]

vim Androd.mk

复制代码
LOCAL_PATH:= $(call my-dir)


include $(CLEAR_VARS)
LOCAL_MODULE := config
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(HOST_OUT)/etc/kernel_config
LOCAL_SRC_FILES := $(TARGET_PREBUILT_TAG)/config
LOCAL_IS_HOST_MODULE := true
include $(BUILD_PREBUILT)
相关推荐
阿里云云原生16 分钟前
告别手动埋点!Android 无侵入式数据采集方案深度解析
android·云原生
czhc114007566316 分钟前
JAVA1026 方法;类:抽象类、抽象类继承;接口、接口继承 Linux:Mysql
java·linux·mysql
王同学_1161 小时前
Linux系统端口关闭并排查相关自启动项(麒麟环境)
linux·运维·服务器
Tlaster1 小时前
使用KMP实现原生UI + Compose混合的社交客户端
android·ios·开源
大聪明-PLUS1 小时前
Linux 中的 DNS 工作原理(二):各级 DNS 缓存
linux·嵌入式·arm·smarc
Xiaoweidumpb1 小时前
Linux Docker docker-compose 部署python脚本
linux·python·docker
郝学胜-神的一滴1 小时前
使用 Python 元类与属性实现惰性加载:Effective Python 第47条
linux·服务器·开发语言·python
袁煦丞 cpolar内网穿透实验室1 小时前
安卓旧机变服务器,KSWEB部署Typecho博客并实现远程访问:cpolar内网穿透实验室第645个成功挑战
android·运维·服务器·远程工作·内网穿透·cpolar
游戏开发爱好者82 小时前
iOS 26 App 查看电池寿命技巧,多工具组合实践指南
android·macos·ios·小程序·uni-app·cocoa·iphone
用户41659673693552 小时前
基于Jetpack Compose 实现列表嵌套滚动联动机制 (完整源码解析)
android