同样,我们需要为这个Client端应用程序编译一个编译脚本,在external/ashmem/client目录下,新建一个Android.mk文件,它的内容如下所示:
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE_TAGS := optional  
  6.   
  7. LOCAL_SRC_FILES := ../common/ISharedBuffer.cpp \  
  8.         SharedBufferClient.cpp  
  9.   
  10. LOCAL_SHARED_LIBRARIES:= libcutils libutils libbinder  
  11.   
  12. LOCAL_MODULE := SharedBufferClient  
  13.   
  14. include $(BUILD_EXECUTABLE)  
       源代码都准备好了之后,就可以对Server端和Client端应用程序进行编译了。关于如何单独编译Android源代码工程中的模块,以及如何打包system.img,请参考如何单独编译Android源代码中的模块一文。
       执行以下命令进行编译和打包:
  1. USER-NAME@MACHINE-NAME:~/Android$ mmm external/ashmem/server     
  2. USER-NAME@MACHINE-NAME:~/Android$ mmm external/ashmem/client             
  3. USER-NAME@MACHINE-NAME:~/Android$ make snod   
       这样,打包好的Android系统镜像文件system.img就包含我们前面创建的Server端应用程序SharedBufferServer和Client端应用程序SharedBufferClient了。
       至此,我们就可以运行模拟器来验证我们的程序了。关于如何在Android源代码工程中运行模拟器,请参考在Ubuntu上下载、编译和安装Android最新源代码一文。
       执行以下命令启动模拟器:
  1. USER-NAME@MACHINE-NAME:~/Android$ emulator    
       模拟器运行起来后,就可以通过adb shell命令连上它:
  1. USER-NAME@MACHINE-NAME:~/Android$ adb shell    
       最后,进入到/system/bin/目录下:
  1. luo@ubuntu-11-04:~/Android$ adb shell  
  2. root@android:/ # cd system/bin   
       进入到/system/bin/目录后,首先在后台中运行Server端应用程序SharedBufferServer:
  1. root@android:/system/bin # ./SharedBufferServer &  
       然后再在前台中重复运行Client端应用程序SharedBufferClient,以便验证程序的正确性:
  1. root@android:/system/bin # ./SharedBufferClient                                  
  2. The value of the shared buffer is 0.  
  3. Add value 1 to the shared buffer.  
  4. root@android:/system/bin # ./SharedBufferClient                                  
  5. The value of the shared buffer is 1.  
  6. Add value 1 to the shared buffer.  
  7. root@android:/system/bin # ./SharedBufferClient                                  
  8. The value of the shared buffer is 2.  
  9. Add value 1 to the shared buffer.  
  10. root@android:/system/bin # ./SharedBufferClient                                  
  11. The value of the shared buffer is 3.  
  12. Add value 1 to the shared buffer.  
       如果我们看到这样的输出,就说明我们成功地在Server端应用程序SharedBufferServer和Client端应用程序SharedBufferClietn共享内存中的数据了。
       至此,Android系统匿名共享内存的C++调用接口MemoryHeapBase和MemoryBase就分析完成了。

Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(7)相关推荐

  1. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划

    在Android系统中,提供了独特的匿名共享内存子系统Ashmem(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中.它有两个特点,一是能够辅助内存管理系统来有效地 ...

  2. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6664554 在上一文章Android系统匿名共 ...

  3. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析

    在前面一篇文章Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析中,我们系统地介绍了Android系统匿名共享内存的实现原理,其中着重介绍了 ...

  4. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析

    出自:http://blog.csdn.net/luoshengyang/article/details/6939890 在Android系统中,针对移动设备内存空间有限的特点,提供了一种在进程间共享 ...

  5. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(6)

    接下来,我们再来看看server模块的实现.在external/ashmem/common目录下,只有一个源文件SharedBufferServer.cpp,它实现了内存共享服务SharedBuffe ...

  6. 【并行计算-CUDA开发】关于共享内存(shared memory)和存储体(bank)的事实和疑惑...

    关于共享内存(shared memory)和存储体(bank)的事实和疑惑 主要是在研究访问共享内存会产生bank conflict时,自己产生的疑惑.对于这点疑惑,网上都没有相关描述, 不管是国内还 ...

  7. 进程间通信——共享内存(Shared Memory)

    共享内存是System V版本的最后一个进程间通信方式.共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式.不同进程之间共 ...

  8. Android 匿名共享内存C++接口分析

    原址 在上一篇Android 匿名共享内存C接口分析中介绍了Android系统的匿名共享内存C语言访问接口,本文在前文的基础上继续介绍Android系统的匿名共享内存提供的C++访问接口.在C++层通 ...

  9. Android 匿名共享内存C接口分析

    原址 在Android 匿名共享内存驱动源码分析中详细分析了匿名共享内存在Linux内核空间的实现,虽然内核空间实现了匿名共享内存,但仍然需要在用户空间为用户使用匿名共享内存提供访问接口.Androi ...

最新文章

  1. No module named 'fcntl'
  2. Excel关于使用图形的妙招技法
  3. 解决IE6透明PNG图片的代码
  4. 为什么好多人都要给Typec叫华为充电线?
  5. python基础知识-Python语言基础知识总结
  6. 造兵三国的服务器要维护多久,FAQ_造兵三国_九游手机游戏
  7. 看好你的数据库连接字符串!
  8. 【解决办法】hosts文件被劫持或者看不到办法
  9. pythonqueue线程_python基于queue和threading实现多线程下载实例
  10. *学生管理系统java面向对象版本
  11. 【教程】python递归三部曲(基于turtle实现可视化)-一、谢尔宾斯基三角形
  12. html怎样设置图片的圆角矩形,怎么把矩形变成圆角 ps怎么在原来的矩形中改成圆角...
  13. Unity3D射击游戏的准心
  14. mysql死锁的例子_GitHub - yxp199249/mysql-deadlocks: 收集一些常见的 MySQL 死锁案例
  15. R语言入门——一文讲明白attach与detach
  16. 北航提出基于语言桥接的时空交互来进行准确指向性视频对象分割
  17. 实验吧编程WP(一)
  18. android代码实现删除,Android中RecyclerView实现Item添加和删除的代码示例
  19. PR软件——音频变音(机器音)
  20. 如何将CAD图块转换成外部参照?

热门文章

  1. windows笔记-【内核对象线程同步】概述
  2. C#.NET里面的多线程处理
  3. java 队列_java自学之路-08双端队列
  4. mac 您没有权限打开应用程序_Mac应用程序无法打开或文件损坏的解决方法
  5. android 8.0 iso6,微信8.0.6更新了什么?IOS系统微信8.0.6版本更新详情一览[多图]
  6. 一年级abb式词语并造句_一年级语文ABB式词语专项练习附答案,考考孩子!
  7. 安卓9.0官方系统升级包_想升级鸿蒙系统都来看看!华为新系统升级名单曝光:有你手机吗?...
  8. java 深拷贝 序列化_java 之 利用序列化实现深拷贝
  9. linux sudoers_Linux –将用户添加到Sudoers列表
  10. swift 的init_Swift init()