# How to Find the Main Application Class in alfaazplus/quranapp: A Complete Guide

> Discover the main application class in alfaazplus/quranapp. Learn where to find QuranApp.kt and how it's declared in AndroidManifest.xml for your development needs.

- Repository: [AlfaazPlus/quranapp](https://github.com/alfaazplus/quranapp)
- Tags: how-to-guide
- Published: 2026-02-24

---

**The main application class in alfaazplus/quranapp is `QuranApp`, located at [`app/src/main/java/com/quranapp/android/QuranApp.kt`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/java/com/quranapp/android/QuranApp.kt), which extends `android.app.Application` and is declared in [`AndroidManifest.xml`](https://github.com/alfaazplus/quranapp/blob/main/AndroidManifest.xml) via `android:name=".QuranApp"`.**

Understanding the entry point of an Android codebase is essential for debugging initialization logic and global state management. In the **alfaazplus/quranapp** repository, the main application class serves as the primary hook for app-wide configuration before any Activity starts. Locating this class requires examining both the Kotlin source files and the Android manifest declaration.

## Identifying the Main Application Class

In any Android project, the system instantiates the **Application** subclass before launching the first Activity. For the quranapp project, this entry point is the `QuranApp` class defined in [`app/src/main/java/com/quranapp/android/QuranApp.kt`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/java/com/quranapp/android/QuranApp.kt).

You can confirm this by verifying the class signature extends `android.app.Application`:

```kotlin
package com.quranapp.android

import android.app.Application
import android.content.Context

class QuranApp : Application() {
    override fun attachBaseContext(base: Context) {
        initBeforeBaseAttach(base)
        super.attachBaseContext(base)
    }
    // ...
}

```

The `QuranApp` class overrides critical lifecycle methods including `attachBaseContext()` and `onCreate()` to execute initialization logic before the user interface appears.

## Verifying the AndroidManifest.xml Declaration

The Android system locates the application class through the `android:name` attribute in [`app/src/main/AndroidManifest.xml`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/AndroidManifest.xml). In this repository, the `<application>` tag explicitly references the `QuranApp` class:

```xml
<application
    android:name=".QuranApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <!-- Activity declarations -->
</application>

```

This declaration ensures the system instantiates `QuranApp` rather than the default `Application` class when the process starts.

## Analyzing the QuranApp Initialization Logic

The `QuranApp` class contains the global initialization sequence for the entire application. As implemented in [`app/src/main/java/com/quranapp/android/QuranApp.kt`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/java/com/quranapp/android/QuranApp.kt), the class performs several critical setup tasks:

**Pre-base context initialization** in `attachBaseContext()`:

- Sets the application files directory via `FileUtils.appFilesDir = base.filesDir`
- Applies the theme using `AppCompatDelegate.setDefaultNightMode()`

**Post-creation setup** in `onCreate()`:

- Initializes `DataStoreManager` for preferences
- Resets download source URLs via `DownloadSourceUtils.resetDownloadSourceBaseUrl()`
- Creates notification channels through `NotificationUtils.createNotificationChannels()`
- Configures WebView data directories for multi-process support on Android P+
- Installs a global uncaught exception handler using `CustomExceptionHandler`

```kotlin
override fun onCreate() {
    super.onCreate()
    DataStoreManager.init(this)
    DownloadSourceUtils.resetDownloadSourceBaseUrl(this)
    NotificationUtils.createNotificationChannels(this)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        val process = getProcessName()
        if (packageName != process) WebView.setDataDirectorySuffix(process)
    }

    Thread.setDefaultUncaughtExceptionHandler(CustomExceptionHandler(this))
    ThemeUtilsV2.syncOldThemePreferences(this)
}

```

## How to Locate the Main Application Class Yourself

If you need to find the main application class in a different branch or after refactoring, follow these verification steps:

1. **Search for Application subclasses** – Use grep or IDE search to find files containing `class.*Application` or specifically `extends Application` (Java) or `: Application()` (Kotlin).

2. **Confirm the file path** – Check that the class resides in the main source set, typically under `app/src/main/java/` or `app/src/main/kotlin/`. For quranapp, the file is at [`app/src/main/java/com/quranapp/android/QuranApp.kt`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/java/com/quranapp/android/QuranApp.kt).

3. **Validate the manifest** – Open [`app/src/main/AndroidManifest.xml`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/AndroidManifest.xml) and inspect the root `<application>` element. The `android:name` attribute must match the class name (with the package prefix or relative dot notation).

## Summary

- The main application class in **alfaazplus/quranapp** is **`QuranApp`** located at [`app/src/main/java/com/quranapp/android/QuranApp.kt`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/java/com/quranapp/android/QuranApp.kt).
- The class extends `android.app.Application` and overrides `attachBaseContext()` and `onCreate()` to handle global initialization.
- The Android system recognizes this class through the `android:name=".QuranApp"` declaration in [`app/src/main/AndroidManifest.xml`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/AndroidManifest.xml).
- Key initialization tasks include setting up file utilities, theme resolution, DataStore initialization, and global exception handling.

## Frequently Asked Questions

### What is the main application class in alfaazplus/quranapp?

The main application class is **`QuranApp`**, a Kotlin class that extends `android.app.Application`. It serves as the primary entry point for the application's process lifecycle, handling global state initialization before any Activity is created.

### Where is the main application class defined in the project structure?

The class is defined in [`app/src/main/java/com/quranapp/android/QuranApp.kt`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/java/com/quranapp/android/QuranApp.kt). This location follows standard Android project conventions where the Application subclass resides in the main source directory under the package namespace `com.quranapp.android`.

### How does the Android system know which class to use as the application entry point?

The Android system reads the `android:name` attribute inside the `<application>` tag in [`app/src/main/AndroidManifest.xml`](https://github.com/alfaazplus/quranapp/blob/main/app/src/main/AndroidManifest.xml). In this repository, the value is set to `.QuranApp`, which the system resolves to `com.quranapp.android.QuranApp` based on the package declaration in the manifest.

### What initialization tasks does the QuranApp class perform?

According to the source code in [`QuranApp.kt`](https://github.com/alfaazplus/quranapp/blob/main/QuranApp.kt), the class initializes `DataStoreManager` for preferences, configures download sources via `DownloadSourceUtils`, creates notification channels through `NotificationUtils`, sets the default night mode for theming, and installs a custom uncaught exception handler to manage crash reporting globally.