文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android的soog_ui的调试(go语言)

2022-06-06 12:46

关注

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的终端无法显示。


作者:tom-wei


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯