Device Info

Device Info - Hardware Info

Introduction

Introducing Device Info, my latest Android app! After trying out a bunch of device information apps, I got curious about how they work. That led me to think, "Why not make one myself?"

So, I used Kotlin and a bit of Java, plus some basic XML design, to create my own. Before diving in, I checked out similar apps to see what features I liked. Then, I made a list of what I wanted in my app. My main goal? To make it super easy to use and give you all the info you need about your device.

It took about a month to finish everything – planning, designing, building, and testing. But now, Device Info is good to go! It's been quite the journey, and I'm excited to share it with you.

Device Info isn't just another app. It's the product of my passion for making something useful and user-friendly. So, let's jump in together and explore your Android device like never before!

Features

The app consists of five main components that work together to provide a seamless user experience. 

Dashboard

  • At-a-Glance Insights: Get a quick overview of your device’s most crucial information, all presented on a beautifully designed dashboard.

Detailed Information

  • Component Breakdown: Explore in-depth details of your device’s CPU, GPU, OS, Display, RAM, Storage, Battery, and more.
  • Connectivity and Network: Understand your device’s network capabilities, including Wi-Fi, Bluetooth, and NFC connections.

Real-Time Monitoring

  • Performance Metrics: Monitor real-time data on CPU and RAM usage, as well as battery health, to keep your device running smoothly.

App Management

  • Comprehensive App Lists: Manage both installed and system apps, sorted by name, size, and installation date, with detailed pages for each app.

Hardware Testing

  • Interactive Tests: Verify the functionality of your device’s hardware, including multi-touch, flash, speaker, microphone, and various sensors.

Technologies Used

Programming Languages

  • Java & Kotlin: For robust and efficient app development.
  • XML: To craft the user interface with precision.

Database

  • SQLite: For reliable local data storage and management.

Design Architecture

  • MVVM (Model-View-ViewModel): Ensures a clean separation of concerns and an organized codebase.

Integrated Development Environment (IDE)

  • Android Studio: The official IDE for Android development, providing a comprehensive suite of tools for building apps.

Design Tools

  • Figma: Utilized for high-fidelity UI/UX design and prototyping.

Libraries

  • Lottie: For adding high-quality animations to the app.
  • Koin: A pragmatic lightweight dependency injection framework.
  • Gson: For parsing and serializing JSON data efficiently.
  • MPAndroidChart: For rendering complex charts and graphs.
  • Glide: For efficient image loading and caching.
  • AndroidBatteryView: A custom library created specifically for displaying battery information.

Version Control

  • GitHub: Used for source code management, allowing for collaborative development and version tracking.

Analytics

  • Firebase: Provides insights into app usage and user engagement.

Workflow

  1. Research and Planning: I began by exploring existing device information apps to understand their features and user experiences. This helped me identify what I wanted to include in my own app and any potential improvements I could make.

  2. UI Drafting: With a clear idea of the features, I sketched out drafts of the user interface. As a developer, I find that starting with drafts allows for flexibility, especially when you’re unsure about the extent of information you can access.

  3. Coding the Core: I dove into coding with the MVVM architecture, focusing on fetching various device details such as CPU, GPU, and battery information. This structure allowed me to build the app piece by piece, ensuring each part was fully functional.

  4. Design Iteration: As I obtained the necessary information for each section, I refined the UI design for that particular part. This iterative process meant that the design evolved alongside the app’s capabilities.

  5. Bringing it All Together: Step by step, I integrated all planned features, ensuring that each element worked harmoniously within the app. The result was a cohesive and informative user experience.

Problem and Solution

  • Device Name

Problem: The Android SDK does not provide the market name of devices, only the model name given by the manufacturer, which can be unfamiliar to users.

Solution: To address this, I compiled a comprehensive list of all Android devices from the official Supported Devices page. From this list, I created a SQLite database, allowing me to query the market device name using the manufacturer’s model name. This ensures users can identify their devices with the names they’re accustomed to.

  • Brand Icon

Problem: Displaying the brand of a device in a visually appealing way can be challenging due to the variety of brands and associated icons.

Solution: I developed a custom module containing icons for different device brands. This module can be easily integrated into the app, providing a consistent and recognizable visual representation of the device’s brand.

  • Android Icons

Problem: Similar to brand icons, there’s a need for a uniform set of Android icons that represent various device features and specifications.

Solution: Utilizing the approach taken with the brand icons, I created a custom module for Android icons. This module includes a curated selection of icons that represent the Android platform, enhancing the user interface with familiar and intuitive graphics.

  • CPU and GPU Information

Problem: The Android SDK does not provide detailed information about the CPU and GPU, such as the market name or specific core details. For example, while the CPU model might be listed as SM7325, it doesn’t reveal that this corresponds to the Snapdragon 778G.

Solution: To overcome this, I scraped a list of all system-on-chips for Android devices and created a SQLite database with comprehensive details. Now, by querying the database with the CPU model, users can retrieve the full specifications, including the market name, fabrication details, and individual core information.

  • SDK Limitations

Problem: Many hardware details are not readily available through the Android SDK, necessitating direct reading of Linux kernel files to obtain necessary information.

Solution: By delving into the Linux kernel files, I extracted the required data that the SDK does not provide. This approach has enabled the app to present a more complete picture of the device’s hardware.

  • Realtime Charting

Problem: The MP Android Chart library does not support realtime chart updates by default, which is essential for displaying dynamic data.

Solution: With some creative adjustments and technical tweaks, I managed to enable realtime updates on the charts. This allows the app to display data that changes in real-time, enhancing the user experience.

  • Battery View

Problem: There was no suitable solution available to display current battery information as a dynamic view or icon that changes according to the battery’s charge level and state.

Solution: I developed ‘Android Battery View,’ a custom view extending the Android View class, to dynamically represent the battery’s status. This custom view changes its appearance based on the battery level and can be found on my GitHub repository: Android Battery View.

Screenshots

Demo

Here is an APK for testing the Device Info app. 

Download Now

What I’ve Learned

Throughout the development of this project, my journey was as much about discovery as it was about creation. Here are some key insights I gained:

  • Understanding Android Devices: I delved deep into the intricacies of Android devices, unraveling the layers that users interact with daily. This exploration gave me a profound appreciation for the complexity and sophistication of modern mobile devices.

  • System Insights: I learned how Android’s underlying system operates, where data is meticulously stored, and how it’s retrieved to provide a seamless user experience.

  • App Ecosystem: Observing how other applications function within the same ecosystem broadened my perspective on designing apps that play well with others, ensuring compatibility and efficiency.

  • Linux Kernel Structure: The Linux kernel is the bedrock upon which Android stands. Understanding its structure was like learning a new language that, once mastered, allowed me to communicate more effectively with the device’s core.

  • Version Variations: With each new Android version, changes abound. I learned to navigate these changes, adapting to new information structures and system behaviors.

  • Cross-Version Compatibility: Ensuring that an app remains functional across different versions of Android was a challenge that taught me the importance of forward-thinking and adaptability in software development.

Source Code

The source is open and hosted on GitHub under Apache 2.0 License. 

Have a look at - https://github.com/ahmmedrejowan/DeviceInfo

Conclusion

This journey through the development of my Android application has been both challenging and rewarding. It pushed the boundaries of my understanding of Android devices, their operating systems, and the underlying Linux kernel. The solutions I crafted not only solved the immediate problems but also contributed to a broader knowledge base that can assist others facing similar challenges.

As I continue to explore the vast landscape of mobile development, I remain committed to learning, sharing, and improving. Whether it’s through closed-source ventures that push technological limits or open-source contributions that foster community growth, the adventure never ceases.

Thank you for following along with this project’s story. May it inspire your own path of discovery and innovation in the world of technology.