当前位置: 首页 > article >正文

aosp系统源码aidl文件如何查看对应生成的java文件-安卓系统开发实战小技巧分享

背景:

经常在系统开发时候会用到一些跨进程的接口文件,比如xxx.aidl等接口文件,我们知道aidl文件都最后会被转换成java代码文件参与编译,所以经常在开发过程中,查看或者分析某些代码时候需要对查看aidl对应的java文件,比如现在想要看看
frameworks/base/core/java/android/hardware/display/IDisplayManager.aidl

在这里插入图片描述
这个aidl生成的对应java代码,应该怎么看呢?针对查看系统源码的aid文件l生成的对应java文件,这里大家一般可以想到如下2种方案:

方案1、直接拿到aidl文件后,使用最aidl命令来手动生成对应的java,或者c++等代码,这种方式优点就是简单方便直接,只要有aidl文件既可以,但是因为系统的aidl文件可能依赖很多系统类和代码,所以这里针对系统的复杂aidl文件手动生成可能就不合适了,较为麻烦

方案2、因为aosp系统代码本身要经过编译,所以系统编译完成后肯定会有aidl生成的java文件产生,这里直接去系统out目录中寻找aidl对应的java文件既可以。

所以这里针对系统比较复杂的aidl文件还是比较建议方案2。

如何系统直接寻找aidl文件对应java文件呢?

直接out目录查看查找方式,这里主要以下几个步骤:
下面以查看IDisplayManager.aidl文件为例
1、获取aidl文件的完整路径目录
frameworks/base/core/java/android/hardware/display/IDisplayManager.aidl

2、进入到out/soong/.intermediates寻找
大部分aidl中间生成文件都会在out/soong/.intermediates目录,使用如下命令进行查看查找:

aosp/out/soong/.intermediates$ cd frameworks/base/
aosp/out/soong/.intermediates/frameworks/base$ find -name IDisplayManager.java
./framework-minus-apex/android_common/gen/aidl/aidegen_aidl8.srcjar/android/hardware/display/IDisplayManager.java

明显发现这里找到了对应java文件,可以发现IDisplayManager.java内容确实和以前aidl命令生成的java一样
在这里插入图片描述

注意大坑:
正常大家第一次进入out目录:find -name IDisplayManager.java一般都是找不到的,会有如下结果:

$ find -name IDisplayManager.java //这里发现找不到IDisplayManager.java文件
$ find -name IDisplayManager.*
./framework-minus-apex/android_common/gen/aidl/frameworks/base/core/java/android/hardware/display/IDisplayManager.aidl.d
./framework-minus-apex/android_common/javac/shard38/classes/android/hardware/display/IDisplayManager.uau
./framework-minus-apex/android_common/javac/shard38/classes/android/hardware/display/IDisplayManager.class
./api/api-stubs-docs-non-updatable/android_common/gen/aidl/frameworks/base/core/java/android/hardware/display/IDisplayManager.aidl.d
./api/system-api-stubs-docs-non-updatable/android_common/gen/aidl/frameworks/base/core/java/android/hardware/display/IDisplayManager.aidl.d
./api/module-lib-api-stubs-docs-non-updatable/android_common/gen/aidl/frameworks/base/core/java/android/hardware/display/IDisplayManager.aidl.d
./api/test-api-stubs-docs-non-updatable/android_common/gen/aidl/frameworks/base/core/java/android/hardware/display/IDisplayManager.aidl.d

上面发现根本找不到IDisplayManager.java文件,只能找到一堆的IDisplayManager.aidl.d文件,这个不是我们想要的,那么该怎么处理才可以有马哥上面的IDisplayManager.java。

出绝招小技巧:

请查看如下文章
aosp11/12/13 framework源码开发IDE工具之idegen/aidegen/AIDEGen详细使用

即使用aidegen把单独framework/base拉起,可以在as进行使用,如果发现没有则使用如下命令运行as:

aidegen frameworks/base/ -i s -s

这个命令运行完全后,然后再去out目录寻找既可以成功:

aosp/out/soong/.intermediates$ cd frameworks/base/
aosp/out/soong/.intermediates/frameworks/base$ find -name IDisplayManager.java
./framework-minus-apex/android_common/gen/aidl/aidegen_aidl8.srcjar/android/hardware/display/IDisplayManager.java

更多framework实战干货请关注下面“千里马学框架”


http://www.kler.cn/a/512207.html

相关文章:

  • 云原生周刊:K8s 生产环境架构设计及成本分析
  • C语言:位段
  • 第10章:Python TDD优化货币类方法与引入工厂方法
  • AI时代下 | 通义灵码冲刺备战求职季
  • 深入探索 Vue.js 组件开发中的最新技术:Teleport 和 Suspense 的使用
  • 麒麟系统下载依赖到本地
  • pcm | Parity Check Matrix(奇偶校验矩阵)
  • Linux 网络 序列化与反序列化~
  • 电脑如何访问手机文件?
  • 以太坊深入解析:概念与原理全面剖析
  • ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档
  • 将IDLE里面python环境pyqt5配置的vscode
  • 黑马点评之导入初始项目(java)
  • [八省联考 2018] 制胡窜
  • 畅游Diffusion数字人(14):基于3D人体网格的语音驱动手势视频生成 ECCV 2024
  • 如何使用C++来实现OPENAI协议通过OLLAMA来与AI大模型通信
  • 搭建一个基于Spring Boot的外贸平台
  • browser-use 的简单使用
  • [Datawheel学习]用Llama-index创建Agent、数据库对话Agent和RAG接入Agent
  • Python采集modBus协议数据
  • Linux网络IOv1.1介绍-纯PDF版
  • MySQL 中单独获取已知日期的年月日
  • 直驱式风电储能制氢仿真模型matlab/simulink
  • Type-C充电与智能家居的结合
  • 【王树森搜索引擎技术】概要01:搜索引擎的基本概念
  • MySQL 事务及MVCC机制详解