[Android AIDL] --- AIDL工程搭建

news/2025/2/12 2:33:31/

0 AIDL概念

AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。 通过 AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的 Service 来进行交互。

官方文档中对 AIDL 有这样一段介绍:

Using AIDL is necessary only if you allow clients from different
applications to access your service for IPC and want to handle
multithreading in your service. If you do not need to perform
concurrent IPC across different applications, you should create your
interface by implementing a Binder or, if you want to perform IPC, but
do not need to handle multithreading, implement your interface using a
Messenger. Regardless, be sure that you understand Bound Services
before implementing an AIDL.

第一句很重要,“只有当你允许来自不同的客户端访问你的服务并且需要处理多线程问题时你才必须使用AIDL”,其他情况下你都可以选择其他方法,如使用 Messenger,也能跨进程通信。可见 AIDL 是处理多线程、多客户端并发访问的,而 Messenger 是单线程处理。

上面的概念摘抄自https://juejin.cn/post/7125316537749241864#heading-0

1 如何在android studio中搭建使用aidi的cs框架

1> 新建工程
在这里插入图片描述

新建完成之后是这样的
在这里插入图片描述

2> 修改moudle name,将默认的app修改为aidl_client
在这里插入图片描述

改完之后是这样的
在这里插入图片描述

3> 新建aidl_server module, File->New->Phone & Table Module-> next
在这里插入图片描述

建立好之后整个工程是这样的
在这里插入图片描述

4> 修改编译的app name
默认是这样的
在这里插入图片描述

将app修改为aidl_client
在这里插入图片描述

5> 在server端新建aidl文件
在这里插入图片描述

建好之后如下
在这里插入图片描述

我们要实现的接口方法都在aidl文件中实现即可,写好aidl文件之后,我们直接编译,切换到project视图,可以看到build目录生成与aidl文件对应的java文件。
在这里插入图片描述

6> 有了aidl接口之后,需要在server端新建service
在这里插入图片描述

在service类中实现刚才aidl的接口

7> 直接在文件中找到aidl文件目录,从aidl_server端,将aidl文件拷贝到aidl_client 端
在这里插入图片描述

拷贝到这里
在这里插入图片描述

8> 在client端调用server端实现的aidl方法时候,需要主要两个参数
在client端的这2个设置

                    intent.setAction("com.example.aidl_server");intent.setPackage("com.example.aidl_server");

action和package的参数需要与server端的AndroidManifest.xml中的参数对应
在这里插入图片描述

9> client端的AndroidManifest.xml修改,主要是要添加<uses-permission> 和<queries>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.example.aidl_client"><uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"tools:ignore="QueryAllPackagesPermission" /><queries><package android:name="com.example.aidl_service"/></queries><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Aidl"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

http://www.ppmy.cn/news/1073216.html

相关文章

Java实现学生信息管理系统读取Excel数据

场景案例&#xff1a; 假设有一个学生信息管理系统&#xff0c;需要从Excel文件中读取学生的姓名、年龄、成绩等数据&#xff0c;并将这些数据存储到系统中进行进一步的处理和管理。 具体来说&#xff0c;在数据导入/导出系统中调用这个函数&#xff0c;并传入Excel文件作为参…

Candies Distribution

There are n children numbered from 11 to n in a kindergarten. Kindergarten teacher gave ai​ (1≤ai​≤n) candies to the i-th child. Children were seated in a row in order from 1 to n from left to right and started eating candies. While the i-th child was…

SAP_ABAP_接口技术_API实践总结

1.1 代码模版 FUNCTION zfm_for_api. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *"----------------------------------------------------------------------DATA:l_value TYPE strin…

【云原生】Ansible自动化批量操作工具playbook剧本

目录 1.playbook相关知识 1.1 playbook 的简介 1.2 playbook的 各部分组成 2. 基础的playbook剧本编写实例 2.1 playbook编写Apache安装剧本&#xff08;yum方式安装&#xff09; 报错集&#xff1a; 实例2&#xff1a;playbook编写nginx 的yum安装并且能修改其监听端口的…

【JAVA基础】数据类型,逻辑控制

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 数据类型整型变量 int长整型变量 long单精度浮点数 float双精度浮点数 double字符类型 char字节…

基于野马算法优化的BP神经网络(预测应用) - 附代码

基于野马算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于野马算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.野马优化BP神经网络2.1 BP神经网络参数设置2.2 野马算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

c# Task异步使用

描述 Task出现之前&#xff0c;微软的多线程处理方式有&#xff1a;Thread→ThreadPool→委托的异步调用&#xff0c;虽然可以满足基本业务场景&#xff0c;但它们在多个线程的等待处理方面、资源占用方面、延续和阻塞方面都显得比较笨拙&#xff0c;在面对复杂的业务场景下&am…

千亿规模的办公IT服务市场,这公司何以搞定5W+企业?丨爱分析调研

[图片] 企业办公IT服务&#xff0c;是指企业为员工提供的IT服务&#xff0c;涵盖办公软硬件&#xff0c;旨在满足企业业务运营需要。Frost & Sullivan数据显示&#xff0c;2021年中国企业办公IT服务的市场规模为1560亿元人民币&#xff0c;并保持稳定增长。办公软硬件已成为…