Research

Technology Review

Technology Research and Documentation

Our research for the AR Learner project focused primarily on official documentation from key technologies used in our implementation. We extensively consulted Google's ARCore documentation, which provided foundational knowledge on implementing augmented reality features in Android applications. The ARCore SDK documentation outlines essential components for AR development, including motion tracking, environmental understanding, and light estimation, which were crucial for creating a reliable AR experience [1].

For Android development with Jetpack Compose, we relied on Google's official Compose documentation, which provides comprehensive guidance on building modern Android UIs. The documentation covers key concepts such as state management, navigation, and UI component design, which influenced our application architecture [2]. Additionally, Android's location services documentation offered insights into efficiently working with geolocation data, which was essential for our location-based feature implementation [3].

The implementation of the database and backend components was guided by Room persistence library documentation, which details best practices for local data storage in Android applications [4]. This documentation helped structure our data models and database access patterns, ensuring efficient data retrieval and storage. For the web interface, we referenced Express.js documentation to develop a lightweight, scalable server that efficiently handles API requests between the frontend and database [5].

Video Tutorials and Practical Implementation

While documentation provided theoretical foundations, several video tutorials were instrumental in demonstrating practical implementations. "Build an Augmented Reality App in Android with ARCore – Place 3D Objects in the Real World" by Code with FK offered a comprehensive walkthrough of ARCore implementation that directly influenced our approach to placing location pins in AR space [6]. This tutorial demonstrated practical techniques for rendering 3D objects in physical space and managing AR sessions.

For modern Android development, Philipp Lackner's "When Should You Migrate to Jetpack Compose?" provided valuable insights that informed our decision to use Compose over traditional XML layouts [7]. The video explores Compose's advantages including faster development cycles, simplified state management, and better code organization, all of which proved beneficial during our implementation phase.

Additionally, we explored various community resources and developer forums to understand best practices in AR implementation. These resources provided insights into common challenges and solutions when working with spatial computing and location-based services, which helped inform our design decisions throughout the development process.



Summary of Technical Decisions

Programming Language: Kotlin

We selected Kotlin as our primary programming language for Android development based on several key advantages. Kotlin's concise syntax significantly reduced boilerplate code compared to Java, resulting in faster development cycles and more maintainable code. The language's null safety features helped prevent common runtime errors, while its coroutine support provided elegant solutions for asynchronous operations, which were critical for handling location data and AR sessions. Additionally, Kotlin's full interoperability with Java allowed us to leverage existing Android libraries while benefiting from modern language features.

UI Framework: Jetpack Compose

For the user interface, we chose Jetpack Compose over traditional XML layouts. This decision was driven by Compose's declarative programming model, which simplified state management and UI updates. The reactive approach to UI building aligned perfectly with our need to display dynamic location-based data. Compose's preview functionality accelerated our design iteration process, while its built-in animation capabilities enhanced the user experience with smooth transitions between screens and states.

Backend Database: Azure SQL Database

We implemented Azure SQL Database for our backend data storage solution. This cloud-based database service offered the scalability required for our growing user base while maintaining high performance for complex location-based queries. Azure's integrated authentication and authorization systems provided robust security for sensitive user data. Additionally, the platform's automatic backup and disaster recovery features ensured data reliability, which was crucial for maintaining user trust in a location-tracking application.

Augmented Reality: ARCore with ARSceneView

Google's ARCore SDK was selected for implementing augmented reality features due to its robust support for Android devices and comprehensive feature set. ARCore's motion tracking capabilities enabled precise positioning of virtual objects in physical space, while its environmental understanding facilitated realistic interactions between AR elements and the real world. The platform's light estimation features enhanced visual fidelity by adjusting AR rendering based on ambient lighting conditions.

To simplify AR rendering and scene management, we integrated ARSceneView, a high-level framework built on top of ARCore. ARSceneView provided an abstraction layer that streamlined the implementation of complex AR functionality, including 3D object rendering, hit testing, and anchor management. This framework significantly reduced development time by handling low-level graphics operations and AR session lifecycle management, allowing our team to focus on creating meaningful location-based AR experiences rather than managing rendering pipelines. The combination of ARCore and ARSceneView created a robust foundation for the immersive AR experience central to our application.

Local Data Storage: Room Persistence Library

For local data caching and offline functionality, we implemented the Room persistence library. Room's abstraction layer over SQLite simplified database operations while providing compile-time SQL validation to minimize runtime errors. The library's seamless integration with Kotlin coroutines and Flow allowed for reactive data updates throughout the application. This approach ensured consistent user experiences even in areas with limited connectivity, which was crucial for a location-based service intended for diverse environments.

Server Framework: Express.js

We chose Express.js for our API server implementation due to its lightweight footprint and high performance characteristics. Express enabled rapid development of RESTful endpoints that facilitated communication between mobile clients and our Azure database. The framework's middleware architecture provided flexibility for implementing authentication, logging, and error handling. Additionally, Express's extensive ecosystem of plugins allowed us to easily implement features such as rate limiting and data validation without building custom solutions.



References

[1] Google Developers, "ARCore Overview," Android Developers Documentation. [Online]. Available: https://developers.google.com/ar/develop/fundamentals

[2] Google Developers, "Jetpack Compose," Android Developers Documentation. [Online]. Available: https://developer.android.com/jetpack/compose

[3] Google Developers, "Location Services," Android Developers Documentation. [Online]. Available: https://developer.android.com/training/location

[4] Google Developers, "Room Persistence Library," Android Developers Documentation. [Online]. Available: https://developer.android.com/training/data-storage/room

[5] Express.js, "Express Documentation," Express.js Official Documentation. [Online]. Available: https://expressjs.com/en/guide/routing.html

[6] Code with FK, "Build an Augmented Reality App in Android with ARCore – Place 3D Objects in the Real World," YouTube, May 2022. [Online]. Available: https://youtu.be/1whLL4XJlh4?si=m_6X3yhbEXKDUYU_

[7] P. Lackner, "When Should You Migrate to Jetpack Compose? - Android Development," YouTube, Apr. 2023. [Online]. Available: https://youtu.be/VN1s_YjYYDE?si=n_EjRjYegXyJXh