美文网首页
android studio调试源码

android studio调试源码

作者: Youremywoman | 来源:发表于2019-05-31 10:39 被阅读0次

    android studio调试源码

    环境
    • 系统:macOS High Sierra 10.13.2
    • JDK: 1.8.0_201
    • Xcode:9.3
    • AOSP分支:andriod-8.1.0_r20
    • python:2.7 (一般自带)
    安装xcode 命令行工具

    xcode历史版本
    由于appstore上的xcode只能装10.14系统上. 这边从历史版本下载了Command Line Tools(macOS 10.13) for Xcode 9.3

    安装MacPorts或者HomeBrew

    主要用于安装软件

    macports下载链接 根据自己系统选择

    这边shell用的:zsh

    1. 直接编辑~/.zshrc文件

      添加export PATH = /opt/local/bin:$PATH保存

      POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg`

    或者

    1. brew install gmake libsdl git gnupg
    设置可以同时打开文件数字限制

    在~/.zshrc下添加 ulimit -S -n 1024

    创建APFS卷宗

    可以通过 shell 使用以下命令创建磁盘映像:搞完之后60多G 最后大一点这里搞200g
    # hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 200g ~/android.dmg
    这将创建一个 .dmg(也可能是 .dmg.sparseimage)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。
    如果您以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:
    # hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
    对于存储在主目录下的名为 android.dmg 的磁盘映像,您可以向 ~/.zshrc 中添加辅助函数:
    要在执行 mountAndroid 时装载磁盘映像,请运行以下命令:

    
    function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
    

    注意:如果系统创建的是 .dmg.sparseimage 文件,请将 ~/android.dmg 替换成 ~/android.dmg.sparseimage。
    要在执行 umountAndroid 时卸载磁盘映像,请运行以下命令:

    # unmount the android file image
    function umountAndroid() { hdiutil detach /Volumes/android; }
    

    执行mountAndroid成功后 在finder中可以找到android存储圈

    装载 android 存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。

    下载源代码
    • 确保主目录下有一个 bin/ 目录,并且该目录包含在路径中
    mkdir ~/bin
    

    ~/.zshrc中加入PATH=~/bin:$PATH

    • 下载 Repo 工具,并确保它可执行
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 
    chmod a+x ~/bin/repo
    
    初始化repo
    • 在我们自己创建的android存储卷下一般挂载的新的盘是在/Volumes/ 路径下

      makdir WORK_DIR
      cd WORK_DIR
      
      

      这里需要科学上网一半用其他镜像完成 -b命令指定分支

      repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r20

      在~/.zshrc中添加

      export REPO_URL ='https://mirros.tuna.tsinghua.edu.cn/git/git-repo'

      然后repo sync 进入下载源代码进入漫长的等待。由于下载源码的时间太长,中途可能会出现中断情况,虽然repo同步是支持断点续传,但是不知道什么时候会断开,这一点很麻烦,所以可以写一个shell脚本来开启同步

      #!/usr/bin/env bash
      repo sync -j4
      while [ $? -ne 0 ]
      do
        repo sync -j4
      done  
      

      执行这个./xxx.sh

    编译源代码

    在WORK_DIR目录下

    make之前有几个地方注意

    • could not find jdk tools.jar

      在~/.zshrc下添加JAVA_HOME

    • could not find mac sdk
      在build/soong/cc/config/x86_darwin_host.go文件中添加10.13支持

      darwinSupportedSdkVersions=[]String{
          "10.10",
          "10.11",
          "10.12",
          "10.13",//添加
      }
      
    • 遇到bison错误 BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --

      cd WORK_DIR/external/bison
      git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
      mm
      cp WORK_DIR/out/host/darwin-x86/bin/bison WORK_DIR/prebuilts/misc/darwin-x86/bison/
      
    source build/envsetup.sh
    lunch aosp_arm-eng
    make -j4
    

    这里又进入漫长等待

    源码导入android studio
      bash
      source build/envsetup.sh # 在新终端下需要执行这一步
      mmma development/tools/idegen
      development/tools/idegen/idegen.sh
    
    • 由于aosp工程很大,在导入IDEA前需要先修改配置:
    1. 修改VM内存大小
      打开IDEA 菜单栏 Help > Edit Custom VM Options,添加

      -Xms1g 
      -Xmx5g
      
    2. 修改文件大小限制,打开区分大小写选项
      打开IDEA 菜单栏 Help -> Edit custom properties, 添加

      idea.max.intellisense.filesize=100000
      idea.case.sensitive.fs=true
      

      重启生效

    • 在WORK_DIR根目录下

      android.iml 和 android.ipr 这两个文件,这两个文件是 Android Studio 的工程配置文件,这时候其实已经可以直接导入 Android Studio,但会导入所有的源码模块,会很慢,可以进行过滤,除了 frameworks 模块和 packages 模块,其他都给过滤掉,不导入 Android Studio,打开 android.iml 文件,搜下excludeFolder,在后面加入如下代码

    <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$/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$/test" />
    <excludeFolder url="file://$MODULE_DIR$/toolchain" />
    <excludeFolder url="file://$MODULE_DIR$/tools" />
    <excludeFolder url="file://$MODULE_DIR$/.repo" />
    

    用android studio打开Android.ipr 等待scanning files to index结束

    安装到虚拟机

    执行

    emulator 
    

    这里会打开虚拟机并安装系统镜像

    源码调式

    点击android studio attach process按钮选择我们需要调式的进程比如system_server在AMS处打上断点就可以调式了

    总结

    其实只要调式源码没这么麻烦

    1. 下载framworks部分的代码
    2. 搞一个对应版本的虚拟机
    3. 搞一个android.iml 和 android.ipr文件用andriod studio 打开.ipr
    4. attach进程,打断点。

    相关文章

      网友评论

          本文标题:android studio调试源码

          本文链接:https://www.haomeiwen.com/subject/wmfwtctx.html