【Android】系统源码下载及编译和android studio导入

源码及编译

https://blog.csdn.net/yang553566463/article/details/129029734

步骤 1:创建一个空目录来存放源码:

mkdir aosp
cd aosp

步骤 2:获取最新版本的 repo 并签出 android-8.1.0_r1 分支:

repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r1

其中,android-8.1.0_r1 代表源码标记,代表我们将要获取 Android 8.1 的源码,如需查看其他版本的源码标记,可参阅 源代码标记和 build。

步骤 3:将 Android 源码从默认清单中指定的代码库下载到本地工作目录:

repo sync

步骤 4:创建本地分支并关联 repo 上的所有仓库:

repo start ycx-dev --all

步骤 5:使用 envsetup.sh 脚本初始化编译环境

source ./build/envsetup.sh

步骤 6:选择编译目标:

lunch aosp_arm64-eng

编译目标的格式说明:编译目标的格式是 BUILD-BUILDTYPE ,如 aosp_arm64-eng 这个目标,它的 BUILD 是 aosp_arm64,BUILDTYPE 是 eng 。

BUILD 指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境,例如 aosp_arm64-eng 中的 aosp(Android Open Source Project) 代表 Android 开源项目,arm 表示系统是运行在 arm 架构的处理器上的,arm64 则是指 64 位 arm 架构处理器

想查看 Android 设备的 cpu 架构,可以执行命令:adb shell getprop ro.product.cpu.abi

BUILDTYPE 指的是编译类型,通常有三种:

user:表示编译出的系统镜像版本可以用来正式发布到市场,这个版本是不能 root 的
userdebug:在 user 版本的基础上开放了 root 权限和 debug 权限
eng:表示开发工程师版本,拥有 root 权限,此外还附带了许多 debug 工具
如果我们在终端输入 lunch 命令,将会列出所有的编译目标:

步骤 7:开始编译(设置8个线程同时编译):

m -j8

参与编译的线程并不是越多越好,通常是根据你机器 cup 的核心来确定,公式为:core * 2,即当前 cpu 的核心的 2 倍。

我们可以执行 cat /proc/cpuinfo| grep “cpu cores”| uniq 命令查看电脑 cpu 的核心数。

如果编译过程一切顺利,我们会在终端看到如下画面,表示编译成功!

步骤 8:如果我们 lunch 选中的编译目标是 1-6, 那么我们可以直接执行如下命令运行虚拟机看效果了:

emulator

稍等片刻,我们就可以在虚拟机上操作我们刚刚编译成功系统固件了。

如果我们 lunch 选中的编译目标是非 1-6, 那么我们可以编译的固件运行在真机上,具体步骤如下。

步骤 9:进入 fastboot 模式

adb reboot bootloader

步骤 10:解锁引导加载程序

fastboot flashing unlock

步骤 11:刷写设备

fastboot flashall -w

-w 选项会擦除设备上的 /data 分区;该选项在第一次刷写特定设备时可以加上,其他情况下不加也行。

刷写顺利的话,终端打印如下画面,则说明刷机成功了,此时机器会自动重启,稍等机器自动重启即可。

如果不想刷写所有分区,可以单独刷写某个指定分区,具体的命令为:

fastboot flash <分区名> <镜像文件名.img>

其中,<分区名> 指的是要刷写到哪个分区,比如 system、userdata 等;<镜像文件名.img> 指的是要刷写的 img 文件名称。

例如,如果想单独刷写 system.img,则可以输入以下命令:

fastboot flash system system.img

刷写完成后,不能直接简单的重启设备。需要执行以下命令来重新启动设备:

fastboot reboot

该命令会使设备从 fastboot 模式退出,并自动重启到正常的 Android 系统中。

2. 生成IDE导入的工程文件

$ source build/envsetup.sh
$ make idegen
### 或者 mmm development/tools/idegen/
$ development/tools/idegen/idegen.sh

执行完成后,在AOSP根目录下生成文件

android.iml # 导入前需先编辑这个文件
android.ipr # 在Android studio中打开这个文件,导入源码工程

3. 导入前,编辑工程文件

(这步很重要,影响代码的加载速度和跳转)
编辑android.iml文件,需要修改2部分内容:
1)增加excludeFolder列表,排除不需要的源码路径,这样可以加快导入和创建文件索引的速度。在.iml文件中有少了的excludeFolder项,在后面根据自己需要补充即可。例如:

<excludeFolder url="file://$MODULE_DIR$/abi"/>
<excludeFolder url="file://$MODULE_DIR$/art"/>
<excludeFolder url="file://$MODULE_DIR$/bionic"/>
<excludeFolder url="file://$MODULE_DIR$/bootable"/>
<excludeFolder url="file://$MODULE_DIR$/build"/>
<excludeFolder url="file://$MODULE_DIR$/cts"/>
<excludeFolder url="file://$MODULE_DIR$/dalvik"/>
<excludeFolder url="file://$MODULE_DIR$/developers"/>
<excludeFolder url="file://$MODULE_DIR$/development"/>
<!-- <excludeFolder url="file://$MODULE_DIR$/device"/> -->
<excludeFolder url="file://$MODULE_DIR$/docs"/>
<excludeFolder url="file://$MODULE_DIR$/external"/>
<!-- <excludeFolder url="file://$MODULE_DIR$/hardware"/> -->
<excludeFolder url="file://$MODULE_DIR$/kernel"/>
<!-- <excludeFolder url="file://$MODULE_DIR$/libcore"/> -->
<excludeFolder url="file://$MODULE_DIR$/libnativehelper"/>
<excludeFolder url="file://$MODULE_DIR$/ndk"/>
<excludeFolder url="file://$MODULE_DIR$/out"/>
<excludeFolder url="file://$MODULE_DIR$/pdk"/>
<excludeFolder url="file://$MODULE_DIR$/platform_testing"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
<excludeFolder url="file://$MODULE_DIR$/sdk"/>
<!-- <excludeFolder url="file://$MODULE_DIR$/system"/> -->
<excludeFolder url="file://$MODULE_DIR$/tools"/>
<!-- <excludeFolder url="file://$MODULE_DIR$/vendor"/> -->
<excludeFolder url="file://$MODULE_DIR$/toolchain"/>
<excludeFolder url="file://$MODULE_DIR$/compatibility"/>
<excludeFolder url="file://$MODULE_DIR$/compatibility"/>
<excludeFolder url="file://$MODULE_DIR$/test"/>


说明:也可以通过修改development/tools/idegen/excluded-paths文件,增加排除的路径。

2)删除所有…项。这些项是引用的源码中编译出来的jar包,如果保留,在浏览过程中查看类型跳转到这些jar中的class文件,而不是源码java文件。删除后,则可以直接跳转到源码文件。
说明:这些设置也可以在Android studio:project structure - project settings - modules - dependencies中修改,速度比较慢,不如直接编辑.iml文件方便。
例如:

<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$MODULE_DIR$/./AMSS/lagvm/LINUX/android/out/target/product/prodname/system/framework/locksettings.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</orderEntry>
<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$MODULE_DIR$/./AMSS/lagvm/LINUX/android/out/target/product/prodname/system/framework/framework.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

4. 在Android Studio中导入工程

在Android Studio中open打开上面生成的android.ipr文件。如果完成了上面的编辑,并且仅保留所需的源码目录,加载时间会比较短。
加载完成后,可以完整的浏览、编辑代码了。
当关闭AS时,会把当前的配置和索引保存到文件android.iws中。以后再次打开工程就会很快。

修改Android Studio配置参数:

1)Help - Edit custom Properties:  
	(对应配置文件:~/.config/Google/AndroidStudio$version/idea.properties)
	idea.max.intellisense.filesize=100000
2)Help - Edit custom VM options:
	(对应配置文件:~/.config/Google/AndroidStudio$version/studio64.vmoptions)
	-Xms1g
	-Xmx5g

如果修改参数错误,导致studio不能正常启动,可以手动编辑对应的配置文件,删除或者调整相关参数。

WSL2编译报错
Checking build tools versions…
build/core/main.mk:90: ************************************************************
build/core/main.mk:91: You are building on a case-insensitive filesystem.
build/core/main.mk:92: Please move your source tree to a case-sensitive filesystem.
build/core/main.mk:93: ************************************************************
build/core/main.mk:94: *** Case-insensitive filesystems not supported. Stop.

这个错误信息是由于在使用构建工具时,文件系统不支持大小写敏感导致的。它建议将源代码树移动到一个支持大小写敏感的文件系统上。

在这里插入图片描述
以管理员身份运行cmd,然后执行

fsutil file setCaseSensitiveInfo 路径 enable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值