博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android的soog_ui的调试(go语言)
阅读量:2383 次
发布时间:2019-05-10

本文共 8939 字,大约阅读时间需要 29 分钟。

1 .源码

soog_ui程序的源码的位置在:build/soong/cmd/soong_ui目录下,有main.go和Android.bp。

2. Go基础

2.1 变量声明

变量名在左,类型在右var config build.Config

2.2 包引用

在main.go函数中引用build包,build中Config类型的定义。

15 package main                                                                     16                                                                                  17 import (                                                                         18         "context"                                                                19         "flag"                                                                   20         "fmt"                                                                    21         "os"                                                                     22         "path/filepath"                                                          23         "strconv"                                                                24         "strings"                                                                25         "time"                                                                   26                                                                                  27         "android/soong/ui/build"                                                 28         "android/soong/ui/logger"                                                29         "android/soong/ui/tracer"                                                30 )  78         var config build.Config                                        79         if os.Args[1] == "--dumpvars-mode" || os.Args[1] == "--dumpvar-mode" {   80                 config = build.NewConfig(buildCtx)                               81         } else {                                                                 82                 config = build.NewConfig(buildCtx, os.Args[1:]...)               83         }

在文件build/soong/ui/build/config.go中

15 package build                                                                    16                                                                                  17 import (                                                                         18         "io/ioutil"                                                              19         "log"                                                                    20         "os"                                                                     21         "path/filepath"                                                          22         "runtime"                                                                23         "strconv"                                                                24         "strings"                                                                25         "time"                                                                   26                                                                                  27         "android/soong/shared"                                                   28 )    30 type Config struct{ *configImpl }                                                31                                                                                  32 type configImpl struct {                                                         33         // From the environment                                                  34         arguments []string                                                       35         goma      bool                                                           36         environ   *Environment                                                   37                                                                                  38         // From the arguments                                                    39         parallel   int                                                           40         keepGoing  int                                                           41         verbose    bool                                                          42         checkbuild bool                                                          43         dist       bool                                                          44         skipMake   bool                                                          45                                                                                  46         // From the product config                                               47         katiArgs     []string                                                    48         ninjaArgs    []string                                                    49         katiSuffix   string                                                      50         targetDevice string                                                      51 }   ....350 func (c *configImpl) Arguments() []string {                                                                                                                                                             351         return c.arguments                                                      352 }

在15行声明了是build包,在30行声明个Config结构,在32行定义这个结构。

如果想访问Config中的arguments成员,通过Arguments()函数,而不是直接访问arguments成员。

2.3 打印

打印信息使用fmt.Fprintln函数,在85行中,使用Arguments()函数打印config中的arguments变量。

78         var config build.Config                                                                                                                                                                          79         if os.Args[1] == "--dumpvars-mode" || os.Args[1] == "--dumpvar-mode" {   80                 config = build.NewConfig(buildCtx)                               81         } else {                                                                 82                 config = build.NewConfig(buildCtx, os.Args[1:]...)               83         }                                                                        84                                                                                  85         fmt.Fprintln(os.Stderr, "tom 4=",config.Arguments());

3. soong_ui生成与运行

在lunch()—>build_build_var_cache()—>soong_ui.bash

574 function lunch()                                                                                          575 {                                                                                                         576     local answer  ....  622     TARGET_BUILD_VARIANT=$variant \                                              623     TARGET_PLATFORM_VERSION=$version \                                           624     build_build_var_cache   }  47 function build_build_var_cache()                                                                           48 {                                                                                                          49     local T=$(gettop)                                                                                      50     # Grep out the variable names from the script.                                                         51     cached_vars=`cat $T/build/envsetup.sh | tr '()' '  ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`  52     cached_abs_vars=`cat $T/build/envsetup.sh | tr '()' '  ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`  53     # Call the build system to dump the "
=
" pairs as a shell script. 54 build_dicts_script=`\builtin cd $T; build/soong/soong_ui.bash --dumpvars-mode \ 55 --vars="$cached_vars" \ 56 --abs-vars="$cached_abs_vars" \ 57 --var-prefix=var_cache_ \ 58 --abs-var-prefix=abs_var_cache_` }

soong_ui.sh的内容如下:

55 soong_build_go soong_ui android/soong/cmd/soong_ui                               56                                                                                  57 cd ${TOP}                                                                        58 exec "$(getoutdir)/soong_ui" "$@"

在55行中,编译main.go成soong_ui,在58行中执行soong_ui。

4. 调试方法

在main.go添加debug信息,然后执行lunch命令,就可以Debug soong_ui。

5. dumpvars.go调试

在dumpvars.go中,想通过mt.Fprintln(os.Stderr, “tom--------11112222”);需要"fmt"和"os"两个包,只需要添加os包就可以了。

17 import (                                                                         18         "bytes"                                                                  19         "fmt"                                                                    20         "strings"                                                                21         "os"                                                                     22 )     fmt.Fprintln(os.Stderr, "tom--------11112222");

说明:

1)加入包"os",同时要使用这个包,使用语句fmt.Fprintln(os.Stderr, “tom--------11112222”);.
2)fmt.Printf("")语句,在lunch的终端无法显示。

转载地址:http://rafab.baihongyu.com/

你可能感兴趣的文章
文件列表输出到文件
查看>>
Ubuntu(804) SSH远程管理服务器安装配置
查看>>
android源码
查看>>
使用Hadoop的JAVA API远程访问HDFS
查看>>
Linux下任务调度服务crond使用
查看>>
ZeroMQ的订阅发布(publish-subscribe)模式
查看>>
使用redis存储全球IP库
查看>>
Snappy Java API简介
查看>>
C/C++中正则表达式库RE2的使用
查看>>
HBase Java API(1.2.X)使用简介
查看>>
Java:实现比较接口时,应该全面的进行各种情况的比较
查看>>
python3.*下用mob_pbxproj自动化修改配置
查看>>
使用fir打包,测试跳转安装的坑
查看>>
版本号大小判断,适用规则(X.X.X.X........)
查看>>
关于Objective-C方法签名规则的说明
查看>>
libxml2.dylb 添加后找不到<libxml/tree.h> 头文件
查看>>
关于 [[self class] alloc]的理解
查看>>
Eclipse导入Web项目后代码不报错但项目报错(左上角有红叉)解决方案
查看>>
List、Set、数据结构、Collections
查看>>
Sudoku Solver
查看>>