下载AOSP源码、编译、导入AS、运行在模拟器上

因为官方的地址需要*,目前国内可以利用清华大学的镜像库:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

  1. AOSP和Android源码的区别:AOSP+Gapps(谷歌服务包)=原生

    安卓官方原生系统是指谷歌搭载在nexus系统产品上的,AOSP指的是开源安卓项目,前者集成了谷歌服务,而AOSP没有,并且可以供开发者进行编译使用

  2. 下载AOSP

    !!!建议使用使用tar包下载源码,见3 !!!

    !!!移动硬盘如果不是NTFS的,必须要设置大小写敏感!!!

    最好使用外接的硬盘来进行存储,因为AOSP占用空间比较大,公司的电脑存储空间有限。(源码下载加上编译 150G都不够用 ^^)

    1. 首先下载 repo 工具。(repo 是针对Android 源码多达几百个项目git库的整合,Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进行组织)

      代码块

      mkdir ~/bin
      PATH=~/bin:$PATH
      curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
      ## 如果上述 URL 不可访问,可以用下面的:
      ## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
      chmod a+x ~/bin/repo
    2. 新建一个存储源码的目录,并且在终端中进入该目录

      代码块

      cd /Volume/lllll(外接硬盘的名称)/
      mkdir AndroidSourceCode
      cd AndroidSourceCode

      如果你的硬盘是ntfs的,那么不能直接进行读写 需要做一下修改,参考这个文章:https://blog.csdn.net/u013247765/article/details/77932144/

    3. 初始化仓库并进行代码下载

      代码块

      repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
      ## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
      ## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
      #某个分支
      repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b pie_dev
      repo sync

       

  3. 使用tar包下载源码

    1. 下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar

    2. 代码块

      tar xf aosp-latest.tar
      cd AOSP   # 解压得到的 AOSP 工程目录
      # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
      repo sync # 正常同步一遍即可得到完整目录

       

  4. 开始编译

    在这之前 先下载 JDK 和 XCode(c代码编译需要 xcode sdk 里面的文件)。

    1. 代码块

      make clobber
      source build/envsetup.sh 
      lunch aosp_x86-eng 
      make -j4   #(这里的数字是根据系统配置来的,比如2核2线程的就可以选择j4)

       

    2. 我遇到了一个错误:

      代码块

      system/core/adb/sysdeps.h:28:10: fatal error: 'error.h' file not found
      #include <error.h>
               ^~~~~~~~~
      1 error generated.
      17:19:40 ninja failed with: exit status 1

      下载了一个XCode就好了。

    3. 下载 nexus drivers : 能*的用 https://developers.google.com/android/nexus/drivers 不能*的 https://developers.google.cn/android/drivers?hl=zh-tw

      下载之后使用 tar 命令解压会得到两个.sh 文件

      extract-google_devices-crosshatch.sh

      extract-qcom-crosshatch.sh

      把这两个文件放到源码下面, 然后使用./xxx.sh 执行这两个文件,会下载相应的驱动到vendor目录中

       

    4. #### build completed successfully (04:42:35 (hh:mm:ss)) ####

      编译成功

  5. 导入到AS

    1. 先生成导入map文件

      代码块

      soruce build/envsetup.sh
      mmm development/tools/idegen/
        [100% 2942/2942] Install: out/host/darwin-x86/framework/idegen.jar
        #### build completed successfully (23:14 (mm:ss)) ####
      sudo ./development/tools/idegen/idegen.sh
    2. 打开Android Studio,点击File->Open,选择刚才生成的android.ipr文件即可,然后就是漫长的等待,注意此时是将源码完全导入到AS中了,不出意外,你会觉得AS运行会卡顿。

    3. 红色的表示已经被忽略了,没有导入,那么也可以通过以下方法来对指定的包进行修改是否导入

      下载AOSP源码、编译、导入AS、运行在模拟器上

       

    4. 在修改完后,我们可以在android.iml可以看到,我们忽略导入了那些包

     

  6. emulator 运行模拟器。

    下载AOSP源码、编译、导入AS、运行在模拟器上