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

2016-08-29 16:08:57来源:http://shyluo.blog.51cto.com/5725845/966926作者:Luoshengyang人点击


同样,我们需要为这个Client端应用程序编译一个编译脚本,在external/ashmem/client目录下,新建一个Android.mk文件,它的内容如下所示:



LOCAL_PATH:=$(callmy-dir)





include$(CLEAR_VARS)





LOCAL_MODULE_TAGS:=optional





LOCAL_SRC_FILES:=../common/ISharedBuffer.cpp/


SharedBufferClient.cpp





LOCAL_SHARED_LIBRARIES:=libcutilslibutilslibbinder





LOCAL_MODULE:=SharedBufferClient





include$(BUILD_EXECUTABLE)



源代码都准备好了之后,就可以对Server端和Client端应用程序进行编译了。关于如何单独编译Android源代码工程中的模块,以及如何打包system.img,请参考如何单独编译Android源代码中的模块一文。

执行以下命令进行编译和打包:



USER-NAME@MACHINE-NAME:~/Android$mmmexternal/ashmem/server


USER-NAME@MACHINE-NAME:~/Android$mmmexternal/ashmem/client


USER-NAME@MACHINE-NAME:~/Android$makesnod



这样,打包好的Android系统镜像文件system.img就包含我们前面创建的Server端应用程序SharedBufferServer和Client端应用程序SharedBufferClient了。
至此,我们就可以运行模拟器来验证我们的程序了。关于如何在Android源代码工程中运行模拟器,请参考在Ubuntu上下载、编译和安装Android最新源代码一文。
执行以下命令启动模拟器:



USER-NAME@MACHINE-NAME:~/Android$emulator



模拟器运行起来后,就可以通过adb shell命令连上它:



USER-NAME@MACHINE-NAME:~/Android$adbshell



最后,进入到/system/bin/目录下:



luo@ubuntu-11-04:~/Android$adbshell


root@android:/#cdsystem/bin



进入到/system/bin/目录后,首先在后台中运行Server端应用程序SharedBufferServer:



root@android:/system/bin#./SharedBufferServer&



然后再在前台中重复运行Client端应用程序SharedBufferClient,以便验证程序的正确性:



root@android:/system/bin#./SharedBufferClient


Thevalueofthesharedbufferis0.


Addvalue1tothesharedbuffer.


root@android:/system/bin#./SharedBufferClient


Thevalueofthesharedbufferis1.


Addvalue1tothesharedbuffer.


root@android:/system/bin#./SharedBufferClient


Thevalueofthesharedbufferis2.


Addvalue1tothesharedbuffer.


root@android:/system/bin#./SharedBufferClient


Thevalueofthesharedbufferis3.


Addvalue1tothesharedbuffer.



如果我们看到这样的输出,就说明我们成功地在Server端应用程序SharedBufferServer和Client端应用程序SharedBufferClietn共享内存中的数据了。

至此,Android系统匿名共享内存的C++调用接口MemoryHeapBase和MemoryBase就分析完成了。

微信扫一扫

第七城市微信公众平台