| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 安卓构建系统 -> 正文阅读 |
|
[移动开发]安卓构建系统 |
同步发布平台
未经允许,谢绝转载 在以下位置描述了Android构建系统:<https://source.android.com/setup/build> 概述构建系统使用一些预设的环境变量和一系列"make"文件来构建Android系统并准备将其部署到平台上。 子项目的Android构建文件叫做Android.bp和Android.mk。 整个存储库的源树顶部只有一个名为"Makefile"的官方文件。你设置了一些环境变量,然后键入"make"或仅键入m来构建内容。你可以在make命令行(其他目标)中添加一些选项以打开详细输出或执行其他操作。 构建输出放置在 目录 这与大多数Android设备上使用的文件系统分区相匹配。 一些细节使用什么工具在构建期间,你将使用soong,ninja和’make’控制构建步骤。主机工具链(编译器,链接器和其他工具)和库将用于构建将在主机上运行的程序和工具。使用不同的工具链来编译将在目标(嵌入式板,设备或模拟器)上运行的C和C++代码。这通常是在X86平台上运行的"交叉"工具链,但会为其他平台(最常见的是ARM)生成代码。内核被编译为独立的二进制文件(它不使用程序加载器或链接到任何外部库)。其他项目,例如本机程序(例如init或工具箱),守护程序或库,将链接到仿生库或其他系统库。 你将使用Java编译器和大量与Java相关的工具来构建大多数应用程序框架,系统服务和Android应用程序本身。最后,使用工具打包应用程序和资源文件,并创建可以安装在设备上或与模拟器一起使用的文件系统映像。 告诉系统Java工具链在哪里在构建任何东西之前,你必须告诉Android构建系统Java SDK的位置。(安装Java SDK是构建的先决条件)。 指定要构建的内容为了决定要构建什么以及如何构建,构建系统要求设置一些变量。可以从同一源代码树构建具有不同软件包和选项的不同产品。可以通过带有"make"变量声明的文件来设置控制此变量的变量,也可以在环境中指定该变量。 设备供应商可以创建定义文件,以描述特定板或特定产品要包含的内容。定义文件称为:buildspec.mk,它位于顶级源目录中。你可以手动编辑此选项以对选择进行硬编码。 如果你有一个buildspec.mk文件,它会设置构建所需的所有make变量,而你不必弄乱选项。 指定选项的另一种方法是设置环境变量。构建系统具有一种相当华丽的方法来为你管理这些选项。 要设置你的构建环境,你需要在
你可以在此时输入"help"(或"hmm")以查看一些实用程序功能,这些功能可以使你更轻松地使用源代码。 要选择要构建的一组东西以及要构建的项目,请使用"choosecombo"功能或"lunch"功能。"choosecombo"将一步一步地引导你完成必须选择的不同项目,而"lunch"则允许你选择一些预设组合。 必须为构建定义的项目是: ? 产品("generic"或某些特定的芯片或平台名称) 这些不同的构建变体的说明位于http://source.android.com/porting/build_system.html#androidBuildVariants 在这篇博客文章中,从用户角度很好地描述了构建过程:http://blog.codepainters.com/2009/12/18/first-android-platform-build/ 实际构建系统设置完毕后,实际上就可以使用"make"命令来构建系统。 要构建整个内容,请在顶层目录中运行"make"。如果要构建所有内容(例如,第一次进行构建),则构建将花费很长时间。 构建技巧查看用于构建软件的实际命令在"make"行上使用"showcommands"目标:
可以将其与另一个make目标结合使用,以查看该构建的命令。也就是说,"showcommands"本身不是目标,而只是指定构建的修饰符。 在上面的示例中,-j4与showcommands选项无关,并且用于执行4个并行运行的make会话。 制定目标这是可用于构建系统不同部分的不同make目标的列表: ? 辅助宏和函数当你获取envsetup.sh时,会安装一些辅助宏和函数。它们记录在envesetup.sh的顶部,但是这里是其中一些信息: ? 构建宏和函数? Grep宏和函数? 加快构建你可以在make中使用’-j’选项,以同时启动多个make执行线程。 根据我的经验,你应该指定比计算机上具有处理器多2个线程。如果你有2个处理器,请使用’make -j4’;如果它们是超线程的(意味着你有4个虚拟处理器),请尝试’make -j6。 你还可以指定使用"ccache"编译器缓存,这将在你首次构建内容后加快处理速度。为此,请在你的shell命令行中指定"export USE_CCACHE = 1"。(请注意,ccache包含在存储库的预构建部分中,不必单独安装在主机上。) 对于最新的Android版本,没有预建的ccache,并且需要根据此commit,使用CCACHE_EXEC将路径设置为本地二进制文件。 仅构建单个程序或模块如果使用 “mm"命令在当前目录(和子目录,我相信)中进行填充。使用"mmm"命令,你可以指定目录或目录列表,然后将其构建。 设置模块特定的构建参数Android系统中的某些代码可以按照其构建方式进行自定义(与构建变体以及发行版和调试选项分开)。你可以设置变量来控制各个构建选项,方法是在环境中进行设置,或者将其直接传递给"make"(或称为"make"的"m …"函数)。 例如,可以通过设置INIT_BOOTCHART变量来构建支持bootchart日志记录的’init’程序。(有关为什么你可能要执行此操作,请参见在Android上使用Bootchart。) 你可以使用以下任一方法来完成:
或者
Makefile技巧这些是你可以在自己的Android.mk文件中使用的东西的一些提示。 建立助手功能在文件build/core/definitions.mk中定义了很多构建帮助器函数 尝试列出详尽的清单。 通过以下方式调用它们:或不带参数: 以下是一些可能有趣的功能: ? 构建变量? 解决方法:
将文件直接添加到输出区域你可以使用add-prebuilt-files函数将文件直接复制到输出区域,而无需构建任何内容。 从
添加新程序以进行构建将新程序添加到Android源代码树的步骤? 在"外部"下建立目录 有关更多详细信息,请参见http://www.aton.com/android-native-development-using-the-android-open-source-project/。 构建内核内核是普通Android构建系统的"外部"(实际上,默认情况下,Android Open Source Project中不包括该内核)。但是,AOSP中有一些用于构建内核的工具。如果要构建内核,请从此页面开始:http : //source.android.com/source/building-kernels.html 如果你正在为模拟器构建内核,则可能还需要查看:http : //stackoverflow.com/questions/1809774/android-kernel-compile-and-test-with-android-emulator 而且,Ron M写道(在2012年5月21日在android-kernel邮件列表中): 这篇文章很老-但就AOSP而言,什么都没有改变,所以如果有人对QEMU感兴趣并遇到此问题,请执行以下操作:
步骤#2 调用toolbox.sh包装程序脚本,该脚本可在SSE禁用gcc警告的情况下工作-在GCC <4.5时发生(如AOSP预先构建的X86工具链中一样)。 如果它是X86,该脚本会添加"-mfpmath = 387 -fno-pic",从而消除了上面看到的编译错误。 为了更好地控制构建过程,可以使用"toolbox.sh"包装器并设置一些其他内容,而无需修改脚本文件。 下面是构建相同模拟器的示例:
这适用于2.6.29 goldfish 分支。 译自https://elinux.org/Android_Build_System |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/14 20:13:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |