iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中使用socket使底层和framework通信的实现方法
  • 711
分享到

Android中使用socket使底层和framework通信的实现方法

方法frameworksocketAndroid 2022-06-06 06:06:00 711人浏览 薄情痞子
摘要

一般的native和framework的通信是通过jni,但是这一般只是framework调用native,native如果有消息要怎样通知上层 呢?Android中GSP模块

一般的native和framework的通信是通过jni,但是这一般只是framework调用native,native如果有消息要怎样通知上层 呢?Android中GSP模块提供一种解决思路,但是实现有些复杂,这里介绍一种使用Socket通信的方法可以使native和framework自 由通信,具体实现如下:

android中使用jni对linux中的socket进行了封装。使用起来十分的方便。

由于android是基于linux的,所以linux的代码会在java之前先执行,所以一般native端是服务器。framework端是客户端。

java层主要代码:


view sourceprint?
LocalSocket s =null;
LocalSocketAddress l;
s = new LocalSocket();
l = new LocalSocketAddress(SOCKET_NAME,LocalSocketAddress.Namespace.RESERVED);
s.connect(l);

到此时如果socket连接没有问题,就可以像正常的读写了。

native层主要代码:


view sourceprint?
s_fdListen = android_get_control_socket(SOCKET_NAME);
ret = listen(s_fdListen, n);
s_fdCommand = accept(s_fdListen, (sockaddr *) &peeraddr, &socklen);

如果连接没有问题就可以使用linux中的write/read来对socket进行读和写了;

这里有必要解释一下SOCKET_NAME,它的值是一个字符串,它在init.rc中定义的一个字符串。也就是说,我们可以通过修改init.rc中来申请我们需要的socket资源。

这里以ril为例来说明:


service ril-daemon /system/bin/rild 
socket rild stream 660 root radio 
socket rild-debug stream 660 radio system 
user root 
group radio cache inet misc audio

以上是摘自android 2.2 源码中的system\core\rootdir\init.rc中的片段。至于其具体含义可以参见init.c和system/core/init /readme.txt文件。他的作用是由init.c来解析init.rc,并为我们启动一个名为rild的守护进程,它是一个可执行程序,我们通过 adb shell在system/bin中可以找到对应的rild文件。socket表示为这个守护进程分配一个socket资源,这个socket资源可以在 /dev/socket/下找到rild。也就是本文要这里最关键的地方,socket能不能通就看守护进程能不能很好的起来。上面 SOCKET_NAME也就是这里定义的字符串(在ril.java和ril.cpp中就有一个字符串常量SOCKET_NAME_RIL,他的值就是 rild,和上面的对应)。

如果我们要自定义一个socket来进行通信,我们可以在init.rc的最后面加上


service myserver-daemon /system/bin/server 
socket server stream 666 
oneshot

system/bin/server就是我们编译生成的服务器程序,在里面我们调用


s_fdListen = android_get_control_socket(“server”); 
ret = listen(s_fdListen, n); 
s_fdCommand = accept(s_fdListen, (sockaddr *) &peeraddr, &socklen);

就可以建立一个服务器端程序。

java只需要使用最上面的代码就可以和native通信了,注意SOCKET_NAME值必须上下统一和init.rc中的相等,此处为“rild”。这里的oneshot必须有,没有的话,你的server很可能起不来。

剩下的只剩下编译了。

关于编译可以参考ril中的中的Android.mk和rild.c和ril.cpp,自己把头文件挑出即可。

先用mm编译自己加的模块,编译好后,将添加的模块考出,在源码的根目录下make snod。将编译输出文件加到system.img中。最后将system.img和randisk.img拷到sdk对应的平台中。即可。主要这两个 img文件都要拷,system.img中有你的可执行程序,而randisk.img中有你的init.rc。userdata.img不确定。

此时只需要用java写一个客户端程序即可。

以上所述是小编给大家介绍的Android中使用socket使底层和framework通信的实现方法 ,实现一个模拟后台数据登入的效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文章:详解Android的Socket通信、List加载更多、Spinner下拉列表Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析Android基于socket实现的简单C/S聊天通信功能Android中使用socket通信实现消息推送的方法详解Android Socket通信详解Android开发中Socket通信的基本实现方法讲解Android编程之客户端通过socket与服务器通信的方法python服务器与android客户端socket通信实例Android中Socket通信的实现方法概述android基于socket的局域网内服务器与客户端加密通信


--结束END--

本文标题: Android中使用socket使底层和framework通信的实现方法

本文链接: https://www.lsjlt.com/news/23376.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现socket通信统一接口的方法
    目录UDP通信与TCP通信的实现UDP通信TCP客户端通信使用统一接口定义接口实现接口实现应用层总结Android实现socket通信统一接口,统一接口之后可以在不需要大量修改应用层...
    99+
    2024-04-02
  • Socket的通信原理和使用
     目录 一、什么是 Socket? 二、Socket 通信过程         2.1 通信过程介绍        2.2 实现TCP建立连接的三次握手过程  三、 使用Socket进行通信【php】         3.1 PHP中So...
    99+
    2023-09-06
    网络 php
  • Android中使用eventbus3.0实现fragment通信
    今天就跟大家聊聊有关Android中使用eventbus3.0实现fragment通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.概述在之前的博文中简单介绍过如何实现fragm...
    99+
    2023-05-31
    android eventbus3.0 fragment
  • android中framework的使用方法是什么
    在Android中,Framework是指Android系统提供的一组API和系统服务,用于帮助开发者构建应用程序。开发者可以利用F...
    99+
    2024-03-13
    android
  • php使用socket简单实现通信功能
    目录WebSocket的作用什么是握手背景介绍WebSocket的作用 WebSock其实在平常使用,我们是时常见到的,用于实时通讯,例如我们常用的实时聊天、服务端向客户端消息推送、...
    99+
    2023-03-06
    php socket php socket通信
  • PHP实现Socket通信的方法与技巧
    PHP是一种常用的开发语言,可以用于开发各种 Web 应用程序。除了常见的 HTTP 请求和响应以外,PHP 也支持通过 Socket 进行网络通信,实现更为灵活和高效的数据交互。本文...
    99+
    2024-03-07
    php 通信 socket
  • Java使用Socket通信传输文件的方法示例
    本文实例讲述了Java使用Socket通信传输文件的方法。分享给大家供大家参考,具体如下:前面几篇文章介绍了使用Java的Socket编程和NIO包在Socket中的应用,这篇文章说说怎样利用Socket编程来实现简单的文件传输。这里由于前...
    99+
    2023-05-31
    java socket ava
  • Java聊天室之使用Socket实现通信功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:使用套接字实现了服务器端与客户端的通信。 运行程序,在服务器端的文本框中输入信息,然后按回车键,客户端就会收到服务器端...
    99+
    2022-11-13
    Java实现聊天室 Java聊天室 Java Socket 通信
  • php怎么使用socket简单实现通信功能
    这篇文章主要讲解了“php怎么使用socket简单实现通信功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php怎么使用socket简单实现通信功能”吧!WebSocket的作用WebSo...
    99+
    2023-07-05
  • 实时通信Socket io的使用示例详解
    目录引言1、什么是socket.io2、socket.io的使用3、客户端自带事件4、版本问题引言 最近在工作中,遇到了一个需求,需要和后台服务实时通信,获取各种设备的实时状态、以及...
    99+
    2022-11-16
    Socket io实时通信 Socket io
  • Android串口开发之使用JNI实现ANDROID和串口通信
    导语:Android串口通信在物联网、智能家居等领域具有广泛的应用。本文将详细介绍如何使用JNI技术实现Android设备与串口的通信,包括串口的打开、设置参数和读写数据等过程。 目录 一...
    99+
    2023-10-20
    android java android studio 串口通信 JNI
  • 如何使用C#基于Socket的TCP通信实现聊天室
    这篇文章给大家分享的是有关如何使用C#基于Socket的TCP通信实现聊天室的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下一.Socket(套接字)通信概念套接字(socket)是通信的基石,用于描述...
    99+
    2023-06-29
  • 怎么使用C++ Thread实现简单的socket多线程通信
    本篇内容介绍了“怎么使用C++ Thread实现简单的socket多线程通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!服务端多...
    99+
    2023-07-02
  • android : 底部导航栏的实现(使用ViewPager和BottomNavigationView)
      本案例中需要用的控件ViewPager和BottomNavigationView ViewPager:主要是页面的切换Fragment:碎片(也就是每个页面的内容)BottomNavigationView:底部导航栏 非常简单,主要就...
    99+
    2023-09-01
    android android studio ide
  • 使用python实现UDP通信方式
    目录python UDP通信对UDP协议的理解Socket简介UDP特点UDP中客户端和服务器端交互 UDP网络通信过程 多线程聊天室服务器端的实现UDP中广播p...
    99+
    2024-04-02
  • 怎么在Android中使用AIDL实现进程间通信
    怎么在Android中使用AIDL实现进程间通信?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、概述AIDL 意思即 Android Interface Definiti...
    99+
    2023-05-30
    android aidl
  • Android 通知栏的使用方法
    目录一、设置通知内容二、创建渠道三、设置通知栏的点击操作四、显示通知一、设置通知内容 //CHANNEL_ID,渠道ID,Android 8.0及更高版本必须要设置 N...
    99+
    2024-04-02
  • Socket结合线程池使用实现客户端和服务端通信demo
    目录引导语1、要求2、客户端代码3、服务端代码3.1、对客户端请求进行控制3.2、服务端任务的处理逻辑4、测试5、总结引导语 Socket 面试最终题一般都是让你写一个简单的客户端和...
    99+
    2024-04-02
  • Android中ViewFlipper和AdapterViewFlipper使用的方法实例
    目录一、ViewFlipper二、AdapterViewFlipperAndroid ViewFlipper、AdapterViewFlipper对比复用性动画效果属性配置总结一、V...
    99+
    2024-04-02
  • Android 中使用RadioGroup和Fragment实现底部导航栏的功能
    在一些购物商城中经常会遇到这类效果,效果图如下: 先看效果图 步骤一: 完成对主界面main.xml的创建: <?xml version="1.0" enco...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作