Android 源码编译方法

news2024/11/26 4:38:14

8bc3cdb013e83efa66931a23abde655d.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、查看项目所在分支
二、切换到目标分支
三、查看当前所在分支
四、编译Android源码
五、source Android 编译环境
六、lunch 所需的编译项目
七、单编 模块
八、push 模块 验证修改是否生效
九、参考文献

一、查看项目所在分支

git branch -a
表示:查看并列出当前项目所有分支

高通项目举例如下:

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git branch -a
* linux_android_development
  master
  remotes/origin/A/B_update_linux_android_development
  remotes/origin/HEAD -> origin/master
  ... ...
  remotes/origin/secure_linux_android_development
  remotes/origin/streamlined_code_engineering
Test@Test:/Test/Qualcomm_p/E7M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

二、切换到目标分支

git checkout 分支名
表示: 切换到某个分支。

高通项目举例如下:
git checkout linux_android_development

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git branch -a
* linux_android_development
  master
  remotes/origin/A/B_update_linux_android_development
  remotes/origin/HEAD -> origin/master
  remotes/origin/cts_development_branch
  ... ...
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git checkout linux_android_development

三、查看当前所在分支

git branch
表示:查看当前所在分支

高通项目举例如下:

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ git branch 
* linux_android_development
  master
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

四、编译Android源码

Android 源码编译,每个项目由于脚本各不相同,编译的命令 有时候也会有说差异。

google 官方编译命令如下

1.source ./build/envsetup.sh
2.lunch 项目
3.make -j8

高通项目编译命令 如下:

./buildall_userdebug.sh E5527M all

五、source Android 编译环境

首先进入Android 源码根目录,执行source ./build/envsetup.sh,
如不source,后续则无法单编模块。

高通项目举例如下:

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ source ./build/envsetup.sh 
including device/generic/car/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/uml/vendorsetup.sh
including device/google/muskie/vendorsetup.sh
including device/google/taimen/vendorsetup.sh
including device/qcom/common/vendorsetup.sh
including device/qcom/qssi/vendorsetup.sh
including vendor/partner_gms/products/vendorsetup.sh
including vendor/qcom/opensource/core-utils/vendorsetup.sh
including vendor/qcom/proprietary/common/vendorsetup.sh
including vendor/qcom/proprietary/prebuilt_HY11/vendorsetup.sh
Created 9 symlinks out of 9 mapped links..
including sdk/bash_completion/adb.bash
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

六、lunch 所需的编译项目

执行 lunch 命令,查看所有 编译项目列表,然后选择 编译项目。
高通项目 举例如下:

1. lunch ,然后选择所需编译分支
Test@Test:/Test/Qualcomm_p/E7M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     ... ...
     40. msm8937_64-userdebug
     41. msm8937_64-user
     ... ...
     65. taimenb2-userdebug
// 选择要编译的分支名
Which would you like? [aosp_arm-eng] msm8937_64-userdebug

device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"

 ... ...
OUT_DIR=out
============================================
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
2. 直接lunch 分支

比如我们需要编译msm8937_64-userdebug项目,其实我们可以执行最简单的方法,直接lunch这个项目所排列的位置,比如lunch 40

Test@Test:/Test/Qualcomm_p/E7M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ lunch 40
device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
TARGET_PRODUCT=msm8937_64
... ...

HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=PKQ1.190601.001
OUT_DIR=out
============================================
Test@Test:/Test/Qualcomm_p/27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$

七、单编 模块

我们常用 mmm 以及mm 来及对单模块进行编译。
mmm 与mm 主要区别在于你当前所在的目录位置。
如果当前正在所要编译模块的地方(需要有android.mk文件,才可以进行),请使用 mm,否则使用mmm

高通项目举例如下:

1. mmm使用举例(此时不在FM 目录)

比如单编FM,不在FM目录下,需要执行mmm vendor/qcom/opensource/commonsys/fm/fmapp2/

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ mmm vendor/qcom/opensource/commonsys/fm/fmapp2/

/Test/Qualcomm_p/E5527M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2/
Restriction Checker not present, skipping..
device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"
============================================
... ...
OUT_DIR=out
============================================
QSSI: not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.

... ...
#### build completed successfully (7 seconds) ####

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$
2. mm使用举例(在FM 目录下)

比如单编FM,在FM目录下,需要执行mm

Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android$ cd  vendor/qcom/opensource/commonsys/fm/fmapp2/
Test@Test:/Test/Qualcomm_p/E27M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$ mm
Restriction Checker not present, skipping..
device/qcom/msm8937_64/msm8937_64.mk:42: warning: "Build with 4.9 kernel"
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=9
... ...
OUT_DIR=out
============================================
QSSI: not enabled for msm8937_64 target as vendor/qcom/proprietary/release/QSSI/QSSI_enforced_targets_list.txt was not found.
ninja: no work to do.
... ...
build/make/core/base_rules.mk:412: warning: ignoring old commands for target `out/target/product/msm8937_64/vendor/lib64/hw/fingerprint.default.so'
ninja: no work to do.

#### build completed successfully (41 seconds) ####

Test@Test:/Test/Qualcomm_p/E7M_MSM8917_QM215_r26/LA.UM.7.6.2/LINUX/android/vendor/qcom/opensource/commonsys/fm/fmapp2$

八、 push 模块 验证修改是否生效

1. 使用debug版本,挂载手机

adb shell getprop ro.build.type 主要用来查看当前使用的版本,调试只能使用debug 版本,user版本无法调试。

高通项目举例如下:

C:\Users\Administrator>adb shell getprop ro.build.type
userdebug

C:\Users\Administrator>adb root

C:\Users\Administrator>adb remount
remount succeeded

C:\Users\Administrator>
2.将生成的单模块编译的apk 拷贝到桌面并push到手机中

adb push 本地文件 手机目录
adb push主要用来 替换手机中的apk,调试验证单编是否生效。

高通 FM 举例如下:

C:\Users\Administrator>adb push C:\Users\Administrator\Desktop\FM2.apk /system/app/FM2
C:\Users\Administrator\Desktop\FM2.apk: 1 file pushed. 9.7 MB/s (861880 bytes in 0.085s)

C:\Users\Administrator>
3. 清除 push apk 的存储数据

adb shell pm clear 包名
用来清除当前包名的数据。
比如:adb shell pm clear com.caf.fmradio

高通 FM apk举例如下:

C:\Users\Administrator>adb shell dumpsys activity | findstr Run
    Running activities (most recent first):
        Run #0: ActivityRecord{3bc8d7d u0 com.caf.fmradio/.FMRadio t52}
    Running activities (most recent first):
        Run #0: ActivityRecord{89df584 u0 com.android.launcher3/com.android.searchlauncher.SearchLauncher t51}
C:\Users\Administrator>adb shell pm clear com.caf.fmradio
Success

C:\Users\Administrator>

参考文献:

【腾讯文档】Android Framework 知识库
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

5aef24a2f64d1465cd321ac1c8a2451d.jpeg

点击阅读原文,为大佬点赞!

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

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

相关文章

2.10 Bootstrap 响应式实用工具

文章目录 Bootstrap 响应式实用工具打印类 Bootstrap 响应式实用工具 Bootstrap 提供了一些辅助类,以便更快地实现对移动设备友好的开发。这些可以通过媒体查询结合大型、小型和中型设备,实现内容对设备的显示和隐藏。 需要谨慎使用这些工具&#xff0c…

Qt实现右键菜单栏显示

用到头文件 qmenu.h qevent.h qlabel.h代码 #pragma once // QtTestMenu2.h #include <QtWidgets/QWidget> #include "ui_QtTestMenu2.h" #include "qmenu.h" #include "qevent.h" #include "qlabel.h"class QtTestMenu2 : publ…

基于Nonconvex规划的配电网重构研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【原理图专题】OrCAD Capture如何批量修改原理图网络名称

在实际的工作中,我们很少是从0到1。很多时候供应商或是前人已经给我们留下了电路图,我们要做的初级工作就是让这些标准电路为我们所用。 但事实却是,供应商他们自己公司有自己的一套画图命名标准,而我们自己也有一套命名规则。因为大为都是自己熟悉自己的,所以导致了不能…

【我们一起60天准备考研算法面试(大全)-第十天 10/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

PLL 设计理论

鉴相器的输出驱动电荷泵的开关&#xff0c;再经过滤波器得到一个输出电压&#xff0c;通过VCO产生一个频率&#xff0c;再通过分频器反馈回鉴相器。 杂散&#xff1a;常见的杂散分为参考杂散和小数杂散。参考杂散是指在锁相环输出信号的频谱中&#xff0c;特定频偏处出现的非理…

基于springboot的地铁轨道交通运营系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【LeetCode】动态规划 刷题训练(九)

文章目录 环绕字符串中唯一的子字符串题目解析状态转移方程返回值完整代码 最长递增子序列子数组与子序列的区别状态转移方程完整代码 摆动序列题目解析状态转移方程f[i]状态转移方程g[i]状态转移方程 完整代码 环绕字符串中唯一的子字符串 点击查看:467. 环绕字符串中唯一的子…

Flutter——最详细(NavigationBar)使用教程

NavigationBar简介 Material 3 导航栏组件! 导航栏提供了一种持久且便捷的方式来在应用程序的主要目的地之间进行切换。 使用场景&#xff1a; 底部菜单栏模块 属性作用onDestinationSelected选择索引回调监听器selectedIndex目前选定目的地的索引destinations存放菜单按钮back…

Filter的四大插件(grok、date、mutate、mutiline)

Filter的四个插件 一、grok 正则捕获插件1、grok 的概念2、内置正则表达式调用3、常用的常量NetworkingpathsMonths: January, Feb, 3, 03, 12, DecemberDays: Monday, Tue, Thu, etc...Years?Syslog Dates: Month Day HH:MM:SSShortcutsLog formatsLog Levels 3、自定义表达式…

49. 字母异位词分组

题目链接&#xff1a;力扣 解题思路&#xff1a;字母异位词分组也就是将&#xff1a;字母以及字母个数都相同的单词组合成一组&#xff0c;然后返回结果&#xff0c;比如ate&#xff0c;eat&#xff0c;tea都是由1个a&#xff0c;1个t&#xff0c;1个e组成。 所以&#xff0c…

【python基础】python中的with关键字及其相关用法

目录 1.with关键字 2.上下文管理器 3.总结 4.with torch.no_grad()的用法 在Python中&#xff0c;with是一个关键字&#xff0c;用于处理上下文管理器&#xff08;context manager&#xff09;。上下文管理器是一种对象&#xff0c;它定义了在进入和离开某个上下文时应该执…

7.12~7.13学习总结

public static void main(String[] args){File dirnew File("D:\\小花花");boolean flag dir.mkdir();System.out.println(flag);File dirsnew File("D:\\小花花\\你爸爸");dirs.mkdirs();String[]adir.list();//列出下一级&#xff1b;字符串数组for(Stri…

了解 JVM - 认识垃圾回收机制与类加载过程

前言 本篇通过介绍JVM是什么&#xff0c;认识JVM的内存区域的划分&#xff0c;了解类加载过程&#xff0c;JVM中垃圾回收机制&#xff0c;从中了解到垃圾回收机制中如何找到存活对象的方式&#xff0c;引用计数与可达性分析的方式&#xff0c;再释放垃圾对象时使用的方式&…

【YOLO】yolov5的训练策略1 -- 训练热身warmup

目录 一、什么是训练热身二、常见的训练热身1. Constant Warmup2. Linner Warmup2. Cosine Warmup 三、yolov5的训练热身代码 一、什么是训练热身 众所周知学习率是一个非常重要的超参数&#xff0c;直接影响着网络训练的速度和收敛情况。通常情况下&#xff0c;网络开始训练之…

DNS 是如何影响你冲浪速度的?

本文详细介绍了 DNS 相关知识&#xff0c;包括 DNS 工作原理、如何提升域名解析速度、以及 DNS 记录与报文等内容。 1. 域名与域名服务器 在日常上网过程中&#xff0c;出于好记的原因&#xff0c;人们更喜欢在浏览器中输入网站的域名&#xff0c;而不是 IP 地址。比如想要访问…

小红书如何运营 策略方法总结

大家好&#xff0c;我是权知星球&#xff0c;今天跟大家分享一下小红书如何运营和策略方法总结。 小红书是一个生活方式和消费决策平台&#xff0c;并为用户提供入口&#xff0c;作为一个生活方式社区&#xff0c;小红书的独特之处在于其用户发布的内容都来自于真实生活&#…

MySQL-DDL-数据库操作

开发项目流程 数据库设计-DDL DDL&#xff1a;Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表&#xff09; 数据库 常见操作 查询 查询所有数据库&#xff1a;show databases&#xff1b; 查询当前数据库&#xf…

A Simple Framework for Contrastive Learning of Visual Representations(论文翻译)

A Simple Framework for Contrastive Learning of Visual Representations 摘要1介绍2 方法2.1 对比学习框架2.2 训练大批量数据2.3 评估协议 3.用于对比表示学习的数据增强3.1.数据增强操作的组合对于学习良好的表示至关重要3.2 对比学习需要更强的数据增强比有监督学习 4. 编…

STM32单片机WIFI阿里云老人智能家居语音识别定时吃药

实践制作DIY- GC00158-WIFI阿里云老人智能家居语音识别定时吃药 一、功能说明&#xff1a; 基于STM32单片机设计------WIFI阿里云老人智能家居语音识别定时吃药 二、功能说明&#xff1a; 电路组成&#xff1a;STM32F103CXT6最小系统LD3322语音识别模块LCD1602显示按键1个ULN2…