This is a mobile computation offloading framework that offloads the compute-intensive tasks in mobile devices to more powerful surrogates (nearby Android devices, edge devices or public cloud servers).
If you use this offloading library in your work, don't forget to cite the following paper please:
D. Sulaiman and A. Barker, "MAMoC-Android: Multisite Adaptive Computation Offloading for Android Applications,"
2019 7th IEEE International Conference on Mobile Cloud Computing, Services, and Engineering (MobileCloud), Newark, CA, USA, 2019, pp. 68-75.
We have provided some initial demo applications together with instructions on how to use the framework.
Check them on the MAMoC Demo repository.
We have written a few simple Android JUnit tests to test the different components of the framework.
Make sure that you have both JAVA_SDK and ANDROID_SDK_ROOT variables in your environment.
git clone https://github.com/dawand/MAMoC-Android
cd MAMoC-Android
./gradlew clean build
./gradlew connectedAndroidTest
In order to allow offloading from mobile devices to servers, we need to first setup the servers.
We have created two Docker images for you to deploy on your edge devices (laptops, desktops, edge routers, etc.) or public cloud instances (AWS, Azure, etc.).
You can run the following commands in the terminal of your server machine:
docker pull dawan/mamoc_router
docker run -it -d --name "mamoc-router" -p 8080:8080 dawan/mamoc_router
docker pull dawan/mamoc_server
docker run --rm -it --name "mamoc-server" --network="host" dawan/mamoc_server
If you want to get the source code of the server and host it on bare metal. Navigate to MAMoC-Server
for setting up the router and the server components.
We have performed some modifications to Jadx Decompiler to make it callable within our framework. We decompile all the classes and methods which are annotated with @Offloadable to allow them to be offloaded to external resource providers.
We use Annotation Indexing from classindex library to index all the classes annotated with @Offloadable annotation.
We use crossbar + autobahn to manage the Remote Procedure Calls and Publish/Subscribe events. The reason we have included the source code of the library is its incompatibility with Android API < 24. We have used streamsupport to get the necessary functional interfaces used in Autobahn for older Android versions.