[Android AIDL系列 2] Android源码中编译.aidl文件

2023-05-16

先准备aidl文件,文件目录结果如下。

aidl文件内容,参见:【Android AIDL系列 1:手动编译aidl文件,生成Java、C++(android)、C++(ndk)、Rust接口】

$ tree
.
├── Android.bp
└── com
    └── my
        └── pkg
            ├── IMyServiceCallback.aidl
            └── IMyServiceInterface.aidl

在Android源码里编译,关键是Android.bp文件。适用aidl_interface编译指令,可以支持4中后端语言接口:Java,cpp,ndk,rust。根据需要选择开启(enabled: true),生成对应语言的接口文件。

编译生成ndk的后端接口,关闭其他后端语言接口。

aidl_interface {
    name: "MyServiceAidlInterface",
    srcs: [ "com/my/pkg/*.aidl", ],
    unstable: true,
    backend: {
        java: {
            enabled: false,
            platform_apis: true,
        },
        cpp: {
            enabled: false,
        },
        ndk: {
            enabled: true,
            vndk: {
                enabled: false,
            },
        },
    // Android 12以下不支持编译生成rust后端
    //    rust: {
    //         // By default, the Rust backend is not enabled
    //         enabled: true,
    //    },
    },
}

源码中文件路径

.bp文件和.aidl文件在Android源码路径如下,这个路径是任选的。说明是为了下一步找到生成的接口文件。
$android_source/vendor/service/my_service

生成接口文件路径:
a n d r o i d s o u r c e / o u t / s o o n g / . i n t e r m e d i a t e s / v e n d o r / s e r v i c e / m y s e r v i c e 这个路径是编译时系统自动生成的。前半部分( android_source/out/soong/.intermediates/vendor/service/my_service 这个路径是编译时系统自动生成的。 前半部分( androidsource/out/soong/.intermediates/vendor/service/myservice这个路径是编译时系统自动生成的。前半部分(android_source/out/soong/.intermediates/)是Android源码编译生成的中间文件所在目录,后半部分(vendor/service/my_service)是对应的.aidl文件在源码中的目录。

编译后生成4个文件夹,其中带“-source”后缀的2个文件夹中,包含头文件和源码文件,另外两个文件夹中是编译过程中的.o文件和编译完成的动态库.so文件。
MyServiceAidlInterface-ndk-source和MyServiceAidlInterface-ndk_platform-source目录下源码是一样的,diff没有差别。生成的二进制文件是不同的。(TODO 这个和platform_apis的关系还不确定,ndk的后端没有platform_apis的属性。还是对于ndk来说,platform_apis是必须开启的?)

分类源码二进制
MyServiceAidlInterface-ndkMyServiceAidlInterface-ndk-sourceMyServiceAidlInterface-ndk
MyServiceAidlInterface-ndk_platformMyServiceAidlInterface-ndk_platform-sourceMyServiceAidlInterface-ndk_platform

ndk生成结果

# 生成以下4个文件夹
$ ls -1
MyServiceAidlInterface-ndk
MyServiceAidlInterface-ndk-source
MyServiceAidlInterface-ndk_platform
MyServiceAidlInterface-ndk_platform-source

$ find . -name *.cpp
./MyServiceAidlInterface-ndk-source/gen/com/my/pkg/IMyServiceCallback.cpp
./MyServiceAidlInterface-ndk-source/gen/com/my/pkg/IMyServiceInterface.cpp
./MyServiceAidlInterface-ndk_platform-source/gen/com/my/pkg/IMyServiceCallback.cpp
./MyServiceAidlInterface-ndk_platform-source/gen/com/my/pkg/IMyServiceInterface.cpp

$ find . -name *.h
./MyServiceAidlInterface-ndk-source/gen/include/aidl/com/my/pkg/BpMyServiceCallback.h
./MyServiceAidlInterface-ndk-source/gen/include/aidl/com/my/pkg/BpMyServiceInterface.h
./MyServiceAidlInterface-ndk-source/gen/include/aidl/com/my/pkg/IMyServiceInterface.h
./MyServiceAidlInterface-ndk-source/gen/include/aidl/com/my/pkg/BnMyServiceInterface.h
./MyServiceAidlInterface-ndk-source/gen/include/aidl/com/my/pkg/BnMyServiceCallback.h
./MyServiceAidlInterface-ndk-source/gen/include/aidl/com/my/pkg/IMyServiceCallback.h
./MyServiceAidlInterface-ndk_platform-source/gen/include/aidl/com/my/pkg/BpMyServiceCallback.h
./MyServiceAidlInterface-ndk_platform-source/gen/include/aidl/com/my/pkg/BpMyServiceInterface.h
./MyServiceAidlInterface-ndk_platform-source/gen/include/aidl/com/my/pkg/IMyServiceInterface.h
./MyServiceAidlInterface-ndk_platform-source/gen/include/aidl/com/my/pkg/BnMyServiceInterface.h
./MyServiceAidlInterface-ndk_platform-source/gen/include/aidl/com/my/pkg/BnMyServiceCallback.h
./MyServiceAidlInterface-ndk_platform-source/gen/include/aidl/com/my/pkg/IMyServiceCallback.h

Java后端接口的编译结果

$ ls -1
MyServiceAidlInterface-java
MyServiceAidlInterface-java-source

$ find . -name *.java
./MyServiceAidlInterface-java-source/gen/com/my/pkg/IMyServiceInterface.java
./MyServiceAidlInterface-java-source/gen/com/my/pkg/IMyServiceCallback.java

生成cpp、rust后端情况类似,不再重复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Android AIDL系列 2] Android源码中编译.aidl文件 的相关文章

随机推荐

  • Android Banner2.1.0

    由于最近更新了studio xff0c 好多东西需要更新 xff0c 那就彻底一点吧 xff0c banner原来用的1 4 9的 xff0c 新版的更新了好多 xff0c 之前的方法不能用了 xff0c 不多说直接上代码 依赖 xff1a
  • Ubuntu:如何显示系统托盘图标(systray)

    1 问题说明 Ubuntu 11版本开始 xff0c 默认关闭了托盘图标的显示 xff0c 需要手动执行命令或额外工具配置 xff0c 添加到白名单 Ubuntu 13 04更彻底 xff0c 默认配置根本没有托盘图标 xff0c 除了ja
  • 火锅店连锁企业使用哪款生鲜管理系统软件比较好呢?

    到目前为止 xff0c 餐饮行业的发展越来越好 xff0c 不管是节假日还是平常的日子里 xff0c 基本上餐馆总是会有很多人 xff0c 相比较来说连锁店铺的管理对于一般店铺来说更加的繁琐 xff0c 那是因为大多数的商品都是由总部统一配
  • 2021-10-26OriginPro 2021 v9.8如何修改为中文

    OriginPro 2021 v9 8如何修改为中文 xff1f 知乎 zhihu com https zhuanlan zhihu com p 376311895 按照这个方法亲测有效
  • Android 启动模式singleTask和onNewIntent什么时候调用

    设置启动模式我们不仅可以节省内存的使用 xff0c 还能达到更好的体验 如果IntentActivity处于任务栈的顶端 xff0c 也就是说之前打开过的Activity xff0c 现在处于 onPause onStop 状态的话 其他应
  • Centos7里在gnome桌面创建文件夹快捷方式

    需求 我的home文件夹特别小 xff0c 空间都分配在 data里 xff0c 所以我平常都是到 data路径下 所以我想在桌面上放一个可以直接到 data路径下的快捷键 STEP1 首先是到一个合适的地方 我放在了 data syste
  • 硬盘被格式化重装系统,以前的文件还能恢复吗

    硬盘被格式化重装系统 以前的文件还能恢复吗 今天早上起来就发现电脑有点问题 xff0c 一直提示我有中毒的迹象 xff0c 但是杀毒软件却一直提示我没有问题 xff0c 不知道是不是病毒太过新颖 xff0c 还是免费的杀毒软件不够好用 一阵
  • 聊聊mac系统的 secoclient和iTerm2

    secoclient是啥 xff0c 就是华为出品的VPN网络设置工具 可以连接其他公司的服务器 下载地址 xff1a https secoclient updatestar com 网上百度secoclient下载 xff0c 有很多 x
  • Android Selinux介绍,如何添加selinux 权限

    Selinux简介 SELinux是安全增强型 Linux xff08 Security Enhanced Linux xff09 简称 SELinux 它是一个 Linux 内核模块 xff0c 也是 Linux 的一个安全子系统 优势
  • android 启动app event log

    pid 951 为system server 进程 1 冷启动 Time pid TAG Messag 01 20 33 418 951 wm stack created 22 01 20 33 421 951 wm task create
  • ASP.NET 实现主题切换实例

    通常我们经常看到网页 xff0c 一些软件提供换肤功能 xff0c 各种主题间切换 ASP NET 2 0 中可以用Theme和skin以及CSS轻松实现这个功能 首先简单介绍一下三种技术 xff1a 主题 xff08 Theme xff0
  • MacBook远程控制工具VNC Viewer_亲测使用

    MacBook远程控制工具VNC Viewer 亲测使用 官方下载地址 https www realvnc com en connect download viewer MacBook远程桌面Windows使用Microsoft Remot
  • Android注解(annotation)介绍及其应用

    我的新书 Android App开发入门与实战 已于2020年8月由人民邮电出版社出版 xff0c 欢迎购买 点击进入详情 文章目录 介绍自定义注解注解的应用 xff1a 反射注解的应用 xff1a APT其它 介绍 Annotation
  • Maven配置本地仓库 Maven项目使用本地仓库

    Maven配置本地仓库 Maven项目使用本地仓库 项目部署或开发环境没有外网的情况下 需要配置本地仓库 由于是在内网环境 xff0c maven无法连接互联网 xff0c 所以只能事先将jar下载到本地 xff0c 然后通过配置pom文件
  • Shell脚本

    做 Java 的肯定都接触过 Linux 系统 xff0c 那么很多时候我们在开发的过程中都是把我们项目打成一个jar包 xff0c 或者是war包的形式 xff0c 然后通过 XFTP 上传到我们服务器的指定目录 xff0c 然后运行一端
  • Android开发工具——ADB(Android Debug Bridge) <三>DalvikVM之jdwp线程

    jdwp java debug wire protocol 是dalvik VM的一个线程 xff0c 可以建立在adb或者tcp基础上 xff0c 与DDMS或debugger进行通信 代码位置 dalvik vm jdwp framew
  • Python if else语句用法规范(注意事项)

    在使用 if elif else 条件语句时 xff0c 需要初学者根据实际应用场景 xff0c 自行设计表达式和代码块 xff0c 而在这两部分中 xff0c 有些细节需要初学者注意 1 代码块不要忘记缩进 代码块一定要缩进 xff0c
  • Android源码编译失败,没有具体错误信息

    错误现象 编译Android源码 xff0c 时不时就会编译不过 xff0c 而且没有具体的报错信息 xff0c error log soong log中没有任何具体的错误信息 xff0c 和make时打印出来的信息一样 参见下图 此时 x
  • Android源码(AOSP)中C/C++常用库和头文件位置

    Android中间层或底层开发中 xff0c 有很多是natvie开发的 xff0c 需要使用native的库 这里整理了AOSP中native库和头文件分散的几个主要位置 以供参考 以下目录都是以aosp源码作为根目录 xff0c 显示的
  • [Android AIDL系列 2] Android源码中编译.aidl文件

    先准备aidl文件 xff0c 文件目录结果如下 aidl文件内容 xff0c 参见 xff1a Android AIDL系列 1 xff1a 手动编译aidl文件 xff0c 生成Java C 43 43 android C 43 43