Android.bp探究
有时不知道Android.bp要咋写,特意看了下源码:
./build/soong/androidmk/androidmk/android.go
简单的Android.bp的模板是下面这个样子:
[module type] {name: "[name value]",[property1 name]:"[property1 value]",[property2 name]:"[property2 value]",}
关键是这些内容我们要咋填写,来讲一讲吧。
module type对应android.go文件中的moduleTypes和prebuiltTypes.
var moduleTypes = map[string]string{"BUILD_SHARED_LIBRARY": "cc_library_shared","BUILD_STATIC_LIBRARY": "cc_library_static","BUILD_HOST_SHARED_LIBRARY": "cc_library_host_shared","BUILD_HOST_STATIC_LIBRARY": "cc_library_host_static","BUILD_HEADER_LIBRARY": "cc_library_headers","BUILD_EXECUTABLE": "cc_binary","BUILD_HOST_EXECUTABLE": "cc_binary_host","BUILD_NATIVE_TEST": "cc_test","BUILD_HOST_NATIVE_TEST": "cc_test_host","BUILD_NATIVE_BENCHMARK": "cc_benchmark","BUILD_HOST_NATIVE_BENCHMARK": "cc_benchmark_host","BUILD_JAVA_LIBRARY": "java_library_installable", // will be rewritten to java_library by bpfix"BUILD_STATIC_JAVA_LIBRARY": "java_library","BUILD_HOST_JAVA_LIBRARY": "java_library_host","BUILD_HOST_DALVIK_JAVA_LIBRARY": "java_library_host_dalvik","BUILD_PACKAGE": "android_app","BUILD_RRO_PACKAGE": "runtime_resource_overlay","BUILD_CTS_EXECUTABLE": "cc_binary", // will be further massaged by bpfix depending on the output path"BUILD_CTS_SUPPORT_PACKAGE": "cts_support_package", // will be rewritten to android_test by bpfix"BUILD_CTS_PACKAGE": "cts_package", // will be rewritten to android_test by bpfix"BUILD_CTS_TARGET_JAVA_LIBRARY": "cts_target_java_library", // will be rewritten to java_library by bpfix"BUILD_CTS_HOST_JAVA_LIBRARY": "cts_host_java_library", // will be rewritten to java_library_host by bpfix
}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","APPS": "android_app_import","ETC": "prebuilt_etc",
}
像android_app_import(预编译无源码apk),prebuilt_etc(预编译配置文件),android_app(编译含源码的apk),java_library(编译java静态库),cc_binary(编译可执行文件),这些属性都是我们经常用到的。
name属性不用多说,编译目标的名字。来看下property属性。
func init() {addStandardProperties(bpparser.StringType,map[string]string{"LOCAL_MODULE": "name","LOCAL_CXX_STL": "stl","LOCAL_MULTILIB": "compile_multilib","LOCAL_ARM_MODE_HACK": "instruction_set","LOCAL_SDK_VERSION": "sdk_version","LOCAL_MIN_SDK_VERSION": "min_sdk_version","LOCAL_NDK_STL_VARIANT": "stl","LOCAL_JAR_MANIFEST": "manifest","LOCAL_CERTIFICATE": "certificate","LOCAL_CERTIFICATE_LINEAGE": "lineage","LOCAL_PACKAGE_NAME": "name","LOCAL_MODULE_RELATIVE_PATH": "relative_install_path","LOCAL_PROTOC_OPTIMIZE_TYPE": "proto.type","LOCAL_MODULE_OWNER": "owner","LOCAL_RENDERSCRIPT_TARGET_API": "renderscript.target_api","LOCAL_JAVA_LANGUAGE_VERSION": "java_version","LOCAL_INSTRUMENTATION_FOR": "instrumentation_for","LOCAL_MANIFEST_FILE": "manifest","LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING": "dex_preopt.profile","LOCAL_TEST_CONFIG": "test_config","LOCAL_RRO_THEME": "theme",})addStandardProperties(bpparser.ListType,map[string]string{"LOCAL_SRC_FILES": "srcs","LOCAL_SRC_FILES_EXCLUDE": "exclude_srcs","LOCAL_HEADER_LIBRARIES": "header_libs","LOCAL_SHARED_LIBRARIES": "shared_libs","LOCAL_STATIC_LIBRARIES": "static_libs","LOCAL_WHOLE_STATIC_LIBRARIES": "whole_static_libs","LOCAL_SYSTEM_SHARED_LIBRARIES": "system_shared_libs","LOCAL_USES_LIBRARIES": "uses_libs","LOCAL_OPTIONAL_USES_LIBRARIES": "optional_uses_libs","LOCAL_ASFLAGS": "asflags","LOCAL_CLANG_ASFLAGS": "clang_asflags","LOCAL_COMPATIBILITY_SUPPORT_FILES": "data","LOCAL_CONLYFLAGS": "conlyflags","LOCAL_CPPFLAGS": "cppflags","LOCAL_REQUIRED_MODULES": "required","LOCAL_HOST_REQUIRED_MODULES": "host_required","LOCAL_TARGET_REQUIRED_MODULES": "target_required","LOCAL_OVERRIDES_MODULES": "overrides","LOCAL_LDLIBS": "host_ldlibs","LOCAL_CLANG_CFLAGS": "clang_cflags","LOCAL_YACCFLAGS": "yacc.flags","LOCAL_SANITIZE_RECOVER": "sanitize.recover","LOCAL_LOGTAGS_FILES": "logtags","LOCAL_EXPORT_HEADER_LIBRARY_HEADERS": "export_header_lib_headers","LOCAL_EXPORT_SHARED_LIBRARY_HEADERS": "export_shared_lib_headers","LOCAL_EXPORT_STATIC_LIBRARY_HEADERS": "export_static_lib_headers","LOCAL_INIT_RC": "init_rc","LOCAL_VINTF_FRAGMENTS": "vintf_fragments","LOCAL_TIDY_FLAGS": "tidy_flags",// TODO: This is comma-separated, not space-separated"LOCAL_TIDY_CHECKS": "tidy_checks","LOCAL_RENDERSCRIPT_INCLUDES": "renderscript.include_dirs","LOCAL_RENDERSCRIPT_FLAGS": "renderscript.flags","LOCAL_JAVA_RESOURCE_DIRS": "java_resource_dirs","LOCAL_JAVA_RESOURCE_FILES": "java_resources","LOCAL_JAVACFLAGS": "javacflags","LOCAL_ERROR_PRONE_FLAGS": "errorprone.javacflags","LOCAL_DX_FLAGS": "dxflags","LOCAL_JAVA_LIBRARIES": "libs","LOCAL_STATIC_JAVA_LIBRARIES": "static_libs","LOCAL_JNI_SHARED_LIBRARIES": "jni_libs","LOCAL_AAPT_FLAGS": "aaptflags","LOCAL_PACKAGE_SPLITS": "package_splits","LOCAL_COMPATIBILITY_SUITE": "test_suites","LOCAL_OVERRIDES_PACKAGES": "overrides","LOCAL_ANNOTATION_PROCESSORS": "plugins","LOCAL_PROGUARD_FLAGS": "optimize.proguard_flags","LOCAL_PROGUARD_FLAG_FILES": "optimize.proguard_flags_files",// These will be rewritten to libs/static_libs by bpfix, after their presence is used to convert// java_library_static to android_library."LOCAL_SHARED_ANDROID_LIBRARIES": "android_libs","LOCAL_STATIC_ANDROID_LIBRARIES": "android_static_libs","LOCAL_ADDITIONAL_CERTIFICATES": "additional_certificates",// Jacoco filters:"LOCAL_JACK_COVERAGE_INCLUDE_FILTER": "jacoco.include_filter","LOCAL_JACK_COVERAGE_EXCLUDE_FILTER": "jacoco.exclude_filter","LOCAL_FULL_LIBS_MANIFEST_FILES": "additional_manifests",// will be rewrite later to "license_kinds:" by byfix"LOCAL_LICENSE_KINDS": "android_license_kinds",// will be removed later by byfix// TODO: does this property matter in the license module?"LOCAL_LICENSE_CONDITIONS": "android_license_conditions","LOCAL_GENERATED_SOURCES": "generated_sources",})addStandardProperties(bpparser.BoolType,map[string]string{// Bool properties"LOCAL_IS_HOST_MODULE": "host","LOCAL_CLANG": "clang","LOCAL_FORCE_STATIC_EXECUTABLE": "static_executable","LOCAL_NATIVE_COVERAGE": "native_coverage","LOCAL_NO_CRT": "nocrt","LOCAL_ALLOW_UNDEFINED_SYMBOLS": "allow_undefined_symbols","LOCAL_RTTI_FLAG": "rtti","LOCAL_PACK_MODULE_RELOCATIONS": "pack_relocations","LOCAL_TIDY": "tidy","LOCAL_USE_CLANG_LLD": "use_clang_lld","LOCAL_PROPRIETARY_MODULE": "proprietary","LOCAL_VENDOR_MODULE": "vendor","LOCAL_ODM_MODULE": "device_specific","LOCAL_PRODUCT_MODULE": "product_specific","LOCAL_PRODUCT_SERVICES_MODULE": "product_specific","LOCAL_SYSTEM_EXT_MODULE": "system_ext_specific","LOCAL_EXPORT_PACKAGE_RESOURCES": "export_package_resources","LOCAL_PRIVILEGED_MODULE": "privileged","LOCAL_AAPT_INCLUDE_ALL_RESOURCES": "aapt_include_all_resources","LOCAL_DONT_MERGE_MANIFESTS": "dont_merge_manifests","LOCAL_USE_EMBEDDED_NATIVE_LIBS": "use_embedded_native_libs","LOCAL_USE_EMBEDDED_DEX": "use_embedded_dex","LOCAL_DEX_PREOPT": "dex_preopt.enabled","LOCAL_DEX_PREOPT_APP_IMAGE": "dex_preopt.app_image","LOCAL_DEX_PREOPT_GENERATE_PROFILE": "dex_preopt.profile_guided","LOCAL_PRIVATE_PLATFORM_APIS": "platform_apis","LOCAL_JETIFIER_ENABLED": "jetifier","LOCAL_IS_UNIT_TEST": "unit_test","LOCAL_ENFORCE_USES_LIBRARIES": "enforce_uses_libs","LOCAL_CHECK_ELF_FILES": "check_elf_files",})
addStandardProperties函数的第一个参数决定了这些属性的类型(String,List,Boolean),配置属性时可以对照看下自己写的值对不对。像privileged(是否编译到priv-app目录),
product_specific(是否编译到product目录),system_ext_specific(是否编译到system_ext目录),dex_preopt.enabled(dex优化),certificate(使用何种签名)。
对于string属性具体可以设置啥值,还有待研究。
相关文章:
Android.bp探究
有时不知道Android.bp要咋写,特意看了下源码: ./build/soong/androidmk/androidmk/android.go 简单的Android.bp的模板是下面这个样子: [module type] {name: "[name value]",[property1 name]:"[property1 val…...
【LeetCode】415 字符串相加
415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 示例 1:…...
【RP-RV1126】配置一套简单的板级配置
文章目录 官方配置新建一套新配置新建板级pro-liefyuan-rv1126.mk配置文件新建一个Buildroot的defconfigs文件 吐槽:RP-RV1126 的SDK奇怪的地方make ARCHarm xxx_defconfig 生成的.config文件位置不一样savedefconfig命令直接替换原配置文件坑爹的地方 Buildroot上增…...
解决uniapp的video标签和transition属性使用时出现错位的问题
template:三个视频都每个占满屏幕,点击按钮滚动最外层bgBox元素, style: 想要加上动画过渡效果: 这是显示第一个视频: 点按钮向上滑动滚动到第二个视频时: 视频错位了 ,因为视频消失又出现的时候…...
电脑校园杂志电脑校园杂志社电脑校园编辑部2023年第9期目录
智慧校园 基于vue.js的“微校园”APP设计 吴秋伟 周慧 董锐 李仙云 余维 邓巧平 彭微1-3 探析AIGC对网络安全的革新:挑战与机遇共存 康良成 张朋4-6 文本信息自动摘要技术综述 滕宇飞7-9《电脑校园》投稿:cn7kantougao163.com 区块链应用于图书馆服务的策…...
NSSCTF做题第十页(1)
[GXYCTF 2019]禁止套娃 看源代码也没什么东西,扫一下看看 发现了git泄露 话不多说直接开整 下载下来了 flag.php 还是代码审计 <?php include "flag.php"; echo "flag在哪里呢?<br>"; if(isset($_GET[exp])){ if (!preg_…...
文件详细操作过程(C语言)
🌞🌞🌞千淘万漉虽辛苦🌞🌞🌞 🌞🌞🌞吹尽狂沙始到金🌞🌞🌞 🌇C语言文件操作 🍊文件的定义🍋什么是文…...
python使用ffmpeg来制作音频格式转换工具(优化版)
简介:一个使用python加上ffmpeg模块来进行音频格式转换的工具。 日志: 20231030:第一版,设置了简单的UI布局和配色,实现音频转为Mp3、AAC、wav、flac四种格式。可解析音频并显示信息,可设置转换后的保存路径 UI界面: 编程平台:visual studio code 编程语言:python 3…...
Debug技巧-不启用前端访问后端
在日常开发中,我们经常会遇到各种问题需要调试,前后端都启动需要耗费一定的时间和内存,方便起见,可以直接用抓包数据访问后端,这里我们需要用到Postman或者ApiFox 抓包数据 在系统前台触发后端请求,在控制…...
由CAB/PAB展开的一些思考
又到了一月保底一篇订阅号文章的时候,上周受到Oracle邀请,参加了在上海Oracle办公室举行的CAB(The 13th Oracle China Customer Advisory Board Metting)/ PAB(The 3th Oracle China Partner Advisory Board Metting&…...
系列十五、idea全局配置
一、全局Maven配置 IDEA启动页面>Customize>All settings>Build,Execution,Deployment>Build Tools>Maven 二、全局编码配置 IDEA启动页面>Customize>All settings>Editor>File Encodings 三、全局激活DevTools配置 IDEA启动页面>Customize>A…...
高德Go生态建设与研发实践
序 高德在构建Go生态演化过程中,已经实现了QPS从0到峰值千万的飞跃,本篇文章主要介绍在此过程中积累的一些技术决策及性能优化和重构经验。阅读本文读者会有以下3点收获: 1.高德Go生态发展历程及现状分析 2.高德云原生Serverless落地情况&…...
SpringCloud中Turbine 1.X版本BUG
错误出现在spring-cloud-turbine-stream 包中,因为这个包会启动一个netty-port容器,并将它的server.port 设置为-1 ,从而关闭了Servlet容器,这是官方包的一个Bug,不过Spring Boot 2.0已修复,要么升级包要么…...
SCSS的用法有哪些?分别举例
SCSS的用法主要有: 1: 变量:在SCSS中,我们可以通过 $ 符号来定义变量。比如,我们可以定义一个颜色变量 $color: red;,然后在我们需要使用这个颜色的时候,直接使用 $color 就可以了。 2&#x…...
Spring controller层请求数据和响应数据的简单方法
记录一些很基本的使用方法。 一、GET请求传参方法: 1.方法一:把参数传到?之后 使用注解RequestParam // 假如传值了current和limit /students?current1&limit20 RequestMapping(value "/students", method RequestMetho…...
中国商界杂志中国商界杂志社中国商界编辑部2023年第10期目录查询
要闻 我国旅游市场步入理性繁荣阶段 赵熠如; 10-11 产业 老国货品牌再迎高光时刻 能否留住流量 涂瀚文; 12-13《中国商界》投稿:cnqikantg126.com 金融集聚有力 促进长三角城市高质量发展 刘盛坤; 14-17 辽宁农贸市场亟待优化升级路径在哪儿&#x…...
记录 vue + vuetify + electron 安装过程
NodeJs 版本: 20 内容来自: Electron Vue.js Vuetify 构建跨平台应用_思月行云的博客-CSDN博客文章浏览阅读61次。Go coding!https://blog.csdn.net/kenkao/article/details/132600542 npm config set registry https://registry.npm.taobao.org np…...
短视频账号矩阵系统saas源码搭建/技术
一、短视频矩阵系统建模----技术api接口--获取用户授权 技术文档分享: 本系统采用MySQL数据库进行存储,数据库设计如下: 1.用户表(user): - 用户ID(user_id) - 用户名(…...
词向量模型Word2Vec
Word2Vec CBOW连续词袋模型例子CBOW模型的embeddings层CBOW模型的线性层 总结 skip-gram跳字模型例子Skip-Gram模型的结构 CBOW和skip-gram的目标都是迭代出词向量字典(嵌入矩阵)——embeddings CBOW连续词袋模型 根据上下文词汇预测目标词汇 例子 使…...
公会发展计划(GAP):经过实战考验的 Web3 任务模式
2020 年 12 月,Yield Guild Games 踏上了一段征程,以表彰兢兢业业的 Web3 游戏玩家所付出的时间和努力,同时为他们提供利用自己的技能促进个人成长的机会。这一旅程的第一步是于 2022 年 7 月推出的公会发展计划(GAP)。…...
AI辅助开发:探索快马AI生成智能命令提示与分析的下一代终端工具
今天想和大家分享一个有趣的开发实践:如何用前端技术模拟实现一个具备AI辅助功能的智能命令行终端Web应用。这个项目的灵感来源于日常开发中频繁使用终端工具时遇到的痛点,比如记不住复杂命令、报错信息难以理解等问题。 基础终端界面搭建 首先需要创建一…...
MobaXterm中文版:5步教你掌握Windows最强远程管理神器
MobaXterm中文版:5步教你掌握Windows最强远程管理神器 【免费下载链接】Mobaxterm-Chinese Mobaxterm simplified Chinese version. Mobaxterm 的简体中文版. 项目地址: https://gitcode.com/gh_mirrors/mo/Mobaxterm-Chinese 还在为远程服务器管理烦恼吗&am…...
深入解析Ezno:10个核心特性带你了解这个Rust驱动的JavaScript编译器
深入解析Ezno:10个核心特性带你了解这个Rust驱动的JavaScript编译器 【免费下载链接】ezno A JavaScript compiler and TypeScript checker written in Rust with a focus on static analysis and runtime performance 项目地址: https://gitcode.com/gh_mirrors/…...
圣女司幼幽-造相Z-Turbo赋能微信小程序开发:AI绘图功能集成案例
圣女司幼幽-造相Z-Turbo赋能微信小程序开发:AI绘图功能集成案例 最近在做一个挺有意思的小项目,朋友想给他的文创小店做个微信小程序,核心功能是让用户输入一段文字描述,就能生成一张独一无二的插画。这需求听起来很酷࿰…...
一次企业知识库同步系统改造复盘:从全量拉取到增量消息的演进与多级缓存一致性保障
2026 年 4 月 6 日凌晨 3:17,我们收到一条告警:知识库同步服务 CPU 飙升至 98%,同步任务积压超过 12 万条,下游 AI 助手响应延迟突破 8 秒。这不是第一次了——过去三个月,每逢周一早高峰或知识库批量更新后࿰…...
5分钟解锁百度网盘SVIP下载特权:Mac用户的终极加速指南
5分钟解锁百度网盘SVIP下载特权:Mac用户的终极加速指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾为百度网盘在Mac上的龟速下…...
SeqGPT-560M快速部署:阿里云ECS+双卡4090+Docker一键运行指南
SeqGPT-560M快速部署:阿里云ECS双卡4090Docker一键运行指南 1. 项目简介 SeqGPT-560M是一个专门为企业级信息抽取需求定制开发的高性能AI系统。与常见的聊天对话模型不同,这个系统专注于一件事:从非结构化文本中精准提取关键信息。 想象一…...
霍里思特获2亿融资,矿业分选新势力崛起?
硬氪消息,矿石AI智能分选设备企业霍里思特完成近2亿元C轮融资,由招商局资本领投。该公司技术实力强,产品优势明显,市场表现佳,未来发展值得关注。融资情况与用途霍里思特完成近2亿元C轮融资,由招商局资本领…...
如何快速解密网易云音乐NCM文件:5分钟掌握完整转换指南
如何快速解密网易云音乐NCM文件:5分钟掌握完整转换指南 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 还在为网易云音乐下载的加密NCM文件无法在其他播放器上播放而烦恼吗?ncmd…...
【Houdini】HDA参数编辑实战:从基础到高级技巧
1. HDA参数编辑基础入门 第一次打开Houdini的HDA参数面板时,我完全被那些密密麻麻的选项搞懵了。后来才发现,掌握几个核心概念就能轻松上手。HDA(Houdini Digital Asset)是Houdini中最强大的功能之一,它允许我们把复杂…...
