1.WSL2 安装并、源码编译AOSP源码
2.写给应用开发的学习 Android Framework 教程——玩转AOSP篇之添加 Product
3.手把手教你编译和调试AOSP源码
4.使用Google Pixel5手机调试AOSP(代码下载、编译、源码刷机、学习调试)详细攻略
5.深入学习Repo
6.大牛们是源码怎么阅读android系统源码的?
WSL2 安装并、编译AOSP源码
安装WSL2
参考链接:安装WSL要求Windows 版本及更高版本(内部版本及更高版本)或Windows 。学习spark 源码在power shell或cmd执行如下命令。源码
执行完之后就安装了Linux for Windows,学习并且打开了Windows的源码虚拟机平台和Linux子系统功能,并设置wsl默认版本为2。学习也可以手动安装,源码先在控制面板中找到启用或关闭Windows功能,学习勾选虚拟机平台和适用于Linux的源码Windows子系统功能。然后在应用商店找到Linux子系统(例如Ubuntu)进行安装。学习
如果是源码升级安装wsl,可能还需要同时升级linux内核。直接下载msi升级安装文件,点击安装即可。具体可参考:旧版WSL的手动安装步骤
硬盘设置
这里分为两类,一是将AOSP源码放在Windows文件系统下,二是将源码放置在WSL中。对于前者,需要修改文件目录的大小写敏感,新建完源码目录后,用管理员身份打开Windows的Powershell,执行以下命令:
其中的path就是刚新建用来同步AOSP源码的目录,需要注意的是,这个命令只对指定的目录有效,不会改变已存在的子目录的大小写敏感,所以要在同步代码之前设置好。根据文章:WSL编译AOSP必要的几个前置工作,还需要重新挂载磁盘。如果源码放在了Windows驱动器上,比如说F:\aosp,在WSL中的路径应该是/mnt/f/aosp这种形式的,此时需要以drvfs文件系统重新挂载盘符,否则编译到中途会报错:
注意,每次WSL重启,在编译之前都需要执行这步操作,也可以将它新建成WSL的一个开机服务,确保每次打开WSL都会执行这两段命令。如果是将源码放置在WSL中,需要注意WSL默认占用C盘空间,保证C盘有足够的空间,或者将WSL迁移到别的盘符。因为我的硬盘没有分区,不用担心占满C盘的空间,所以直接将源码放在WSL中编译。查询信息源码WSL安装之后默认是GB大小,对于AOSP的编译是不够的。可通过df命令查看容量,下面是我编译完之后的容量,可以看到占用了GB。
扩展WSL 2虚拟硬盘的大小 如何管理WSL磁盘空间
输出如下:
经过如上操作,将wsl的虚拟磁盘大小调整到1TB。
源码下载
创建bin,并加入path:
下载repo:
下载代码有两种方式,使用每月更新的初始化包或者传统初始化方式。
下载mirrors.tuna.tsinghua.edu.cn...,下载完成后记得根据checksum.txt的内容校验一下。由于所有代码都是从隐藏的.repo目录中checkout出来的,所以我们只保留了.repo目录,下载后解压再repo sync一遍即可得到完整的目录。使用方法如下:
此后,每次只需运行repo sync即可保持同步。
建立工作目录并初始化仓库: repo init -u mirrors.tuna.tsinghua.edu.cn... 如果需要某个特定的Android版本(列表): repo init -u mirrors.tuna.tsinghua.edu.cn... -b android-4.0.1_r1 同步源码树(以后只需执行这条命令来同步): repo sync 详细可见:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror Android源码(AOSP)下载与编译 - 掘金
设置WSL内存大小
直接编译源码,会因为内存不足导致失败,通过free -m查看内存,只有4GB内存,swap空间只有2GB。可以通过设置WSL配置文件来修改相关配置属性。在用户目录下新建.wslconfig文件,在文件管理器输入%USERPROFILE%可找到用户文件夹。注意这里新建.wslconfig文件不要用新建文本文件的方式,这样文件可能没法被正确识别。可以通过命令行输入code .wslconfig的方式。
配置文件如下,根据自己的硬件配置尽可能多的分配多点资源,在编译完成后也能修改回来。我电脑是GB内存,所以给WSL配置GB内存,还有GB swap空间。
编译源码
编译源码就是常规流程,lunch项根据自己需要进行选择,编译线程数根据机器配置选择。
编译可能会报错缺少库文件,直接安装即可。sudo apt-get install libncurses5 如果需要编译出CMakeLists文件,方便导入CLion,需要在编译前添加环境变量。
编译成功!!
导入Clion效果。
若需要导入Android Studio中,还需要生成配置索引。微商平台源码
这一步需要Java环境,提前安装一下。sudo apt install openjdk--jdk
最终效果如下:
写给应用开发的 Android Framework 教程——玩转AOSP篇之添加 Product
在Android应用开发中,我们通常需要根据不同的应用市场打包出不同的apk文件,以满足特定需求。同样的原理,Android系统源码通过配置文件实现“分包”,形成适用于不同硬件产品的系统镜像。这些配置文件统称为“Product”。每个Product适用于特定硬件产品,例如小米的s系列、s pro和s ultra均基于骁龙8+平台。
AOSP预置了多种Product,例如用于x_模拟器的aosp_x_-eng。Product配置文件主要保存在board和product目录下。执行lunch命令时,可以选择对应的Product。例如选择aosp_x_-eng,关注的关键配置文件包括BoardConfig.mk、AndroidProducts.mk、PRODUCT_MAKEFILES和COMMON_LUNCH_CHOICES。
BoardConfig.mk定义了与硬件相关的底层特性,例如CPU位数、bootloader和kernel、摄像头、GPS导航等。它包含了BoardConfigGsiCommon.mk和BoardConfigEmuCommon.mk两个配置文件,分别用于通用系统映像和模拟器配置。这些文件主要与硬件相关,通常很少需要修改。
AndroidProducts.mk定义了执行lunch命令时的选项及其对应的配置文件。PRODUCT_MAKEFILES引入产品的配置文件,而COMMON_LUNCH_CHOICES添加了产品名+构建模式的选项。aosp_x_.mk作为产品配置的主要文件,通过inherit-product函数继承其他文件,并可以使用“-include”来忽略包含文件时的错误提示。
Product配置文件中的变量分为通用变量、路径变量和自定义变量。自定义变量由开发者根据需要定义,如功能变量,表示该变量具有特殊功能。
若要添加自定义Product,例如名为“Jelly”的公司开发的“Rice”手机对标苹果,需要在源码中创建相应的目录和文件。例如在device目录下添加BoardConfig.mk和Rice.mk文件,并从其他配置文件中复制并修改关键信息。AndroidProducts.mk文件中需添加新Product的仿模板堂源码配置。最后验证添加的Product是否成功。
本文提供了一个关于如何在Android系统源码中添加自定义Product的简要示例,旨在帮助开发者更深入地理解并实践AndroidFramework与LinuxKernel的配置过程。了解Product配置有助于开发者根据特定需求定制Android系统,提升应用兼容性和用户体验。
手把手教你编译和调试AOSP源码
一、下载AOSP源码
确保电脑已安装git工具,无repo工具需提前安装。同步AOSP源代码命令如下,同步过程耗时较长,请耐心等待,直到源码完整下载。
二、编译SDK
初始化AOSP编译环境与选择SDK作为编译目标。执行编译命令后,SDK目录生成于指定位置,用于后续AOSP开发与调试。
三、编译AOSP并启动模拟器
设定编译目标运行设备,选择aosp_x_-eng。完成编译后,使用特定命令启动模拟器。
四、使用ASFP打开AOSP子模块
介绍ASFP,谷歌官方提供,便于基于AOSP的开发。若电脑未安装,前往指定链接下载安装。进行模块调试,步骤如下:
(1)项目关键信息在图中红标位置显示。
(2)配置SDK,添加已生成的out/host/linux-x/sdk/sdk/android-sdk_eng.{ $USER}_linux-x目录,并命名为aosp-sdk。
(3)配置SDK至Project、Modules,确保Settings模块使用上述配置的SDK。
五、调试代码
在主编辑器窗口设置代码打断点,点击Attach Debugger to Android Process按钮连接至模拟器,开始调试。关键代码位置为Settings模块的SettingsHomepageActivity类的onCreate方法。启动系统设置后,即可进行调试,查看代码执行效果。
使用Google Pixel5手机调试AOSP(代码下载、编译、刷机、建材网站源码调试)详细攻略
为了在真实设备上调试Android源代码,购买了Google Pixel 5手机,实现这一目标。
下载AOSP代码,查阅相应教程以获取详细信息。为了适配Pixel 5,选择代码的特定分支、TAG和build ID。这些元素确保了能够下载与设备型号兼容的源代码。点击链接访问AOSP源代码页面,关注支持设备列表、标记和build ID,确保下载的代码能够与目标设备Pixel 5兼容。
执行命令下载Pixel 5代码,使用特定build ID下载Nexus和Pixel设备的驱动二进制文件。下载后,解压shell脚本,执行脚本,接受协议并开始解压过程。解压后,即可开始代码编译。
在编译时,选择合适的lunch选项。通过访问编译配置页面,找到并使用针对Pixel 5设备的编译选项。执行命令启动编译过程。
刷机前,确保USB调试功能已打开,执行fastboot和adb命令。在根目录执行特定命令以刷入编译后的镜像,等待刷机完成并重启手机。
为了在编译的Pixel 5设备上进行调试,使用userdebug版本,执行特定命令将修改后的应用推送到设备上。在Launcher中加入日志信息,验证修改效果,确保调试代码的正确性。
值得注意的是,自编译的AOSP版本不包含Google移动服务(GMS)及其应用,需要自行内置。此外,系统应用在AOSP中可能不如原生系统美观,但此不足不会影响调试代码的主要目的。
深入学习Repo
深入理解Repo工具:简化Android源码管理与操作
Repo是AOSP(Android Open Source Project)开发过程中,为处理庞大源码仓库而设计的工具,它通过git管理各个仓库,并提供了一套命令行操作来简化管理和同步。以下是Repo的关键特性和使用场景:
1. 基础配置:Repo的shell脚本包括众多命令,如`checkout.py`、`sync.py`等,可以根据需要自定义和扩展。在Linux环境下推荐使用,Windows环境下虽然可运行,但稳定性较差。
2. 环境配置:使用时,需要在系统的PATH环境变量中添加必要的路径,如Git目录、Python安装路径等。
3. 配置细节:`--worktree`参数至关重要,不指定可能导致初始化错误。另外,可以通过环境变量设置仓库地址和分支,如使用`--repo-url`命令。
4. 仓库管理:Repo支持通过自定义URL托管在GitHub,只需在使用时更新对应的仓库地址。官方文档提供了Windows下的使用指南。
5. Manifest配置:Repo的Manifest定义了仓库的结构,包括远程获取设置、项目列表和子清单等,清单服务器需要实现特定的RPC方法。
6. 实际应用:比如,如果你需要管理私有仓库,避免ODM/客户/合作伙伴的访问,可以将这些仓库从默认清单中排除,只在内部使用。使用`repo forall`时,可以通过`project.list`文件指定特定操作的仓库,或者利用`annotation`元素标记长期不需要同步的仓库。
通过这些配置和技巧,Repo可以帮助开发者更灵活、高效地管理Android源码,提高开发效率。在实际操作中,需要根据项目需求和团队协作方式进行定制和调整。
大牛们是怎么阅读android系统源码的?
深入阅读Android系统源码是大牛们提升技术实力的重要途径。作为开发者,若需大量修改framework代码并深入理解Android系统,AOSP(Android Open Source Project)源码成为学习和实践的首选。
对于仅需浏览常用类实现的开发者,下载源码到Android包管理器中并配置IDE的Source Code路径即可开始阅读。然而,若要深入了解Android系统架构与实现细节,需采取更系统的方法。
阅读源码初期,应聚焦于核心模块,如System Server、Libraries、Services等,了解它们的组织结构和功能。以学习者身份,需关注类与接口的定义,理解其内部实现逻辑与调用关系。深入研究不同组件之间的交互,有助于构建对Android系统整体架构的认知。
学习过程中,结合官方文档、社区教程与讨论,可以提高理解效率。实践是检验学习成果的最好方式,尝试在实际项目中应用所学知识,将理论与实践相结合,能显著提升技术能力。
对于有经验的开发者,深入研究内核模块如Binder、IPC机制、Linux内核集成等,将有助于掌握Android系统的底层工作原理。同时,关注源码中的注释和日志,可以洞察开发者的思路与设计考虑,对于理解复杂实现细节非常有帮助。
持续跟进Android系统的版本更新,理解新增特性和改动,有助于保持技术的敏锐度。加入开发者社区,与同行交流学习心得与问题解决方法,能加速学习过程,同时拓宽技术视野。
综上所述,阅读Android系统源码并非一蹴而就的过程,需要耐心、实践与持续学习。通过系统学习与实践,开发者可以逐步深入理解Android系统,提升技术能力,为自己的职业生涯带来显著提升。
MacBook下载和编译Android AOSP源码
为了在MacBook上下载并编译Android AOSP源码,首先推荐使用国内镜像源,如科大源和清华大学源,以加快下载速度。在进行下载之前,需要确保磁盘格式为Mac的日志格式,以支持编译过程。安装repo和Git是关键步骤。为了获得完整版repo,需要下载clone.bundle和git-repo,然后将clone.bundle复制到git-repo文件夹中,并将git-repo文件夹的所有文件复制到~/bin/目录下。运行repo init命令初始化代码目录,得到AOSP源码的主分支。若要下载其他分支或特定版本的代码,可以切换到该分支并执行相应命令。
在下载源码后,为了编译AOSP,MacBook Pro需要具备JDK环境。可以通过执行/usr/libexec/java_home命令查看JDK的安装位置,然后在~/.bash_profile文件中配置JDK环境。为了确保编译过程顺利进行,需要安装gcc,可以通过brew install gcc或安装Xcode来完成。在遇到分区格式不匹配、内存溢出、权限问题以及缺少对应版本的SDK等常见问题时,可以尝试调整分区格式、增加java堆内存、修改Android.bp文件、添加对应的SDK版本、使用chmod命令修改文件权限等方法解决问题。
编译前的准备工作完成后,切换到Android源码目录下并执行envsetup.sh脚本。根据提示选择合适的启动器,执行make -j4命令启动编译过程,其中-j4表示开启4个线程进行编译。根据MacBook的CPU数量调整编译线程数。编译过程可能需要较长的时间,具体取决于硬件配置和网络环境。编译完成后,系统将启动虚拟机。
为了获取更多支持和资源,可以关注微信公众号“蓝氏青年”、访问GitHub地址github.com/lanjiabin以及CSDN博客blog.csdn.net/qq_...
调试AOSP源码的官方神器-Android Studio for Platform(ASfP)
如果你需要深入研究AOSP源码,Android Studio for Platform(ASfP)是调试神器。目前,它仅支持Ubuntu系统,Windows用户暂不支持下载。安装步骤如下:下载地址:在Ubuntu环境下找到并下载对应的安装包。
安装:解压后,通过命令行执行安装脚本进行安装,卸载则使用相应命令。
启动:官方文档提供了启动脚本,可编写简化脚本或创建桌面图标方便启动。
然而,可能会遇到与App版本Android Studio图标冲突的问题,解决方法是创建专属的Android Studio桌面设置文件。 首次启动ASfP,需导入AOSP代码,无论之前是否编译,系统都会重新编译。配置文件修改后,会进行耗时的Indexing操作,用于代码跳转。 对于代码跳转,Java支持良好,但C++代码跳转会跳转至.h文件,需自行定位cpp文件。尝试C++调试时,可能会遇到"Cannot find AndroidFacet"的提示,选择Java Only模式则能正常调试。 尽管ASfP功能强大,但C++调试功能仍有提升空间。如果你有更好的解决方案或发现其他不足,欢迎分享。Framework层的Binder(源码分析篇)
本文以android-.0.0_r的AOSP分支为基础,解析framework层的Binder工作原理。
从ServiceManager的getService方法入手,其核心代码是通过getIServiceManager().getService(name)获取服务。首先,ServiceManager的实现与进程中的ProcessState密切相关,ProcessState是单例,负责打开和映射Binder驱动。构造函数中,它会初始化驱动、验证版本并设置线程数,接着进行binder映射。
在ProcessState的getContextObject方法中,调用native函数android_util_Binder.cpp中的getContextObject()。这个函数通过handle 0(ServiceManager的handle)获取BpBinder对象,然后通过javaObjectForIBinder函数将其转换为Java中的类型。
进一步分析,BpBinder与java层的Binder之间存在对应关系,通过BinderProxy NativeData创建单例的BinderProxy。然后,每个服务的BinderProxy实例化和计数处理都在这个过程中完成。ServiceManagerNative.asInterface方法简化了getIServiceManager的调用,通过调用asInterface实例化ServiceManagerProxy。
IServiceManager接口通过AIDL生成,其代理类ServiceManagerProxy实际上是不必要的。aidl文件在编译时生成对应java代码,用于binder通信。通过aidl文件,我们可以看到如queryLocalInterface等方法的实现细节。
在Parcel的协助下,客户端与服务端进行数据传递,通过序列化和反序列化进行交互。在transact函数中,对Parcel大小进行检查,避免数据传输过大导致的问题。最后,客户端与binder驱动的通信过程涉及了Transaction数据的写入、等待响应、数据处理和内存回收等步骤。
总的来说,framework层的Binder工作涉及服务管理、数据转换、通信协议和内存管理等环节,理解这些有助于深入掌握Binder的工作机制。
Windows平台下载AOSP源码(使用中科大镜像)
要开始在Windows平台上下载AOSP源码,首先确保你已经安装了必备的工具:Python和Git。可以从以下地址下载Python安装包:Python安装包下载地址
对于Git,你需要下载安装包,并在安装过程中确保勾选"Enable symbolic links"选项,这将有助于后续操作。Git安装包下载地址
接下来,安装Repo工具,这是管理AOSP源码仓库的关键。Repo的安装教程可以在相关文档中找到。
准备好后,打开Git Bash,进行如下步骤。配置环境变量,设置REPO_URL为:export REPO_URL='/aos... -b master,这里的URL应替换为实际的AOSP仓库地址。
最后,执行repo sync命令以同步最新代码。在下载过程中,可以参考Android官网-AOSP源码下载和Android镜像使用帮助文档,以获取详细指导和常见问题解决方案。