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

news2024/9/24 18:56:51

需求: 

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tauri 应用 input 输入自动大写问题定位解决

使用 Tauri React 开发 MinApi(http api接口测试工具) 时,在 Mac 系统中遇到一个很奇怪的问题:在 input 输入框中输入内容时,如果输入的是全小写英文字母,会自动将首字母转换为大写,效果如下图所示。 问题定位 经过排…

WebRTC关键技术及应用场景:EasyCVR视频汇聚平台高效低延迟视频监控解决方案

众所周知,WebRTC是一项开源的实时通信技术,它通过集成音频、视频和数据传输到Web浏览器中,使得实时通信变得简单且无需任何插件或第三方软件。WebRTC不仅是一个API,也是一系列关键技术和协议的集合,它的出现改变了传统…

代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

目录 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度 226.翻转二叉树 题目 226. 翻转二叉树 - 力扣(LeetCode) 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例1&#…

Android下反调试与反反调试

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 反调试检测 反调试检测的几种方式。 1. TrackerId 首先,通过 IDA Pro 的调试器附加到当前 app 进程 关于IDA Pro调试android app的详细教程可以…

必应广告投放推广收费标准和流程

在当今竞争激烈的商业环境中,如何精准高效地推广产品与服务,成为企业面临的重大挑战。微软必应Bing广告平台,凭借其强大的技术实力和精准的数据分析能力,已成为众多企业广告推广的首选。云衔科技作为业界领先的数字化营销服务商&a…

【机器学习-无监督学习】聚类

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

安卓系统升级后,关于Fiddler工具不能抓取https接口问题

问题原因? 目前安卓手机可以抓取的https接口都在安卓7.0版本以下,有时候抓取Android7.0版本或以上的接口抓取不到 因为Android7.0之后常规手段不能抓Https的包,应用会默认不信任用户安装的证书(手机里自己安装的证书),只信任系统…

最新版FaceFusion3.0.0,最强AI换脸,表情修改,视频换脸,年龄修改,多人换脸,面部遮挡换脸,参数调优

主要修改:表情修改,视频换脸,年龄修改,多人换脸,面部遮挡换脸,参数调优 变更日志 改造一切皆工作的建筑介绍pixel boost换脸者为面部检测器添加多角度处理引入年龄修正处理器推出 Live Portrait 表情恢复处理器推出由 Live Portrait 提供支持的脸部编辑处理器用res…

视频制作软件哪个好?前十名推荐!

在视频制作领域,选择合适的软件是提升创作效率和作品质量的关键。本文将根据软件的适用人群:新手入门和专业领域,以及推荐的书籍,为您详细介绍视频制作软件的前十名。 新手入门级别: 1.影忆 功能特点:新手入…

浙大数据结构:05-树9 Huffman Codes

这道题难度挺大,写起来较为费劲,这里我依然使用了STL库,使得代码量大幅减少不过百行,便于大家理解。 机翻: 1、条件准备 数组存储字符对应频率,n,student存储输入多少字符,有多少学生测试。 …

【Transformers基础入门篇2】基础组件之Pipeline

文章目录 一、什么是Pipeline二、查看PipeLine支持的任务类型三、Pipeline的创建和使用3.1 根据任务类型,直接创建Pipeline,默认是英文模型3.2 指定任务类型,再指定模型,创建基于指定模型的Pipeline3.3 预先加载模型,再…

用二维码收集信息时,在后台可以查看、统计哪些数据?

大家都知道,在二维码上关联表单,就可以扫码填写信息了。那么,收集到的数据在哪里查看?具体可以查看到哪些数据呢? 如果是用草料二维码平台搭建的二维码,前往后台,在表单列表中找到对应的表单&a…

智能Ai语音机器人的应用价值有哪些?

随着时间的推移,人工智能的发展越来越成熟,智能时代也离人们越来越近,近几年人工智能越来越火爆,人工智能的应用已经开始渗透到各行各业,与生活交融,成为人们无法拒绝,无法失去的一个重要存在。…

【解密 Kotlin 扩展函数】命名参数和默认值(十三)

导读大纲 1.0.1 命名参数1.0.2 默认参数值 上一节讲述如何自定义 joinToString 函数来代替集合的默认字符串表示 文末遗留下几个待优化问题–传送门 1.0.1 命名参数 我们要解决的第一个问题涉及函数调用的可读性 例如,请看下面的joinToString调用: joinToString(collection,&…

MyBatis深度剖析:从入门到精通的实践指南

前言 什么是mybatis? MyBatis是一款优秀的持久层框架,用于简化Java应用程序与数据库之间的交互 什么是框架,为什么需要框架技术? 框架技术 是一个应用程序的半成品提供可重用的公共结构按一定规则组织的一组组件框架优势&#x…

【自动化测试】Appium 生态工具以及Appium Desktop如何安装和使用

引言 Appium 是一个开源的自动化测试框架,用于测试原生、移动 Web 和混合应用程序。它支持 iOS、Android 和 Windows 平台。Appium 生态系统包含多个工具和库,这些工具和库可以与 Appium 一起使用,以提高移动应用的自动化测试效率 文章目录 引…

Java面试指南(基础篇)

文章目录 前言01 Java语言的特点02 JVM、JRE及JDK的关系03 Java和C的区别04 基本数据类型05 类型转换06 自动装箱与拆箱07 String的不可变性08 字符常量和字符串常量的区别09 字符串常量池10 String 类的常用方法11 String和StringBuffer、StringBuilder的区别12 switch 是否能…

舒服了!学大模型必看的学习书籍来了

最近整理了日前市面上一大波大模型的书,已经打包成pdf了,大家有需要的,可以自行添加获取,纯福利,无套路,添加后说明是哪本书,会直接给大家!(文末获取) 部分书…

IO 多路转接之 epoll

文章目录 IO 多路转接之 epoll1、IO 多路转接之 poll1.1、poll 函数1.2、poll 函数返回值1.3、Socket 就绪条件1.3.1、读就绪1.3.2、写就绪1.3.3、异常就绪 1.4、poll 的优点1.5、poll 的缺点1.6、poll 改写 select 2、IO 多路转接之 epoll2.1、epoll 函数2.2、epoll_create2.3…

Leetcode 反转链表

使用递归 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ class S…