Skip to content

Starter code for Android Kotlin Project with Jetpack Compose πŸš€

License

Notifications You must be signed in to change notification settings

atick-faisal/Jetpack-Android-Starter

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9e31e48 Β· Dec 3, 2024
Oct 13, 2024
Oct 13, 2024
Jun 1, 2024
Oct 13, 2024
Oct 13, 2024
Sep 19, 2024
Oct 13, 2024
Nov 10, 2024
Sep 18, 2024
Dec 3, 2024
Oct 13, 2024
Apr 24, 2023
Sep 19, 2024
Aug 15, 2023
Sep 18, 2024
Feb 9, 2023
Aug 15, 2023
Aug 15, 2023
Sep 18, 2024
Dec 3, 2024
Feb 9, 2023
Jun 1, 2024
Sep 19, 2024
Sep 19, 2024
Jul 14, 2024
Jul 14, 2024
Sep 12, 2023
Aug 15, 2023
Nov 14, 2024

Repository files navigation

Jetpack Logo

What is it

It's a starting template that I use for all my Android apps. It is based on the architecture of the Now In Android app by Google. Check out the app from the latest Release.

Screenshots

Warning

Firebase authentication and crashlytics requires Firebase console setup and the google-services.json file. I have provided a template to ensure a successful build. However, you need to provide your own in order to use all the functionalities.

Documentation



Read The Documentation Here

Features

This template offers Modern Android Development principles and Architecture guidelines. It provides an out-of-the-box template for:

  • Connecting to a remote API using Retrofit and OKHttp
  • Persistent database solution using Room and Datastore
  • Sign In Authentication using Firebase i.e. Google ID and Email
  • Bluetooth communication using classic and low-energy (upcoming) protocols

Note

Firebase auth needs setting up first using the SHA fingerprint. Get the SHA fingerprint of the app and add it to firebase console.

It contains easy-to-use Interfaces for common tasks. For example, the following provides utilities for Bluetooth communication:

/**
 * BluetoothManager interface provides methods to manage Bluetooth connections.
 */
interface BluetoothManager {
    /**
     * Attempts to establish a Bluetooth connection with the specified device address.
     *
     * @param address The address of the Bluetooth device to connect to.
     * @return A [Result] indicating the success or failure of the connection attempt.
     */
    suspend fun connect(address: String): Result<Unit>

    /**
     * Returns the state of the connected Bluetooth device.
     *
     * @return A [StateFlow] emitting the current state of the connected Bluetooth device.
     */
    fun getConnectedDeviceState(): StateFlow<BtDevice?>

    /**
     * Closes the existing Bluetooth connection.
     *
     * @return A [Result] indicating the success or failure of closing the connection.
     */
    suspend fun closeConnection(): Result<Unit>
}

It also contains several utilities and extension functions to make repetitive tasks easier. For example:

/**
 * Displays a short toast message.
 *
 * @param message The message to be displayed in the toast.
 */
fun Context.showToast(message: String) {
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}

/**
 * Checks if the app has a given permission.
 *
 * @param permission The permission to check.
 * @return `true` if the permission is granted, `false` otherwise.
 */
fun Context.hasPermission(permission: String): Boolean {
    return ContextCompat.checkSelfPermission(this, permission) ==
        PackageManager.PERMISSION_GRANTED
}

/**
 * Checks if all the given permissions are granted.
 *
 * @param permissions List of permissions to check.
 * @return `true` if all permissions are granted, `false` otherwise.
 */
fun Context.isAllPermissionsGranted(permissions: List<String>): Boolean {
    return permissions.all { hasPermission(it) }
}

Technologies

  • Kotlin 2.0
  • Jetpack Compose
  • Kotlin Coroutines
  • Kotlin Flow for Reactive Data
  • Retrofit and OkHttp
  • Firebase Auth
  • Firebase Crashlytics
  • Room Database
  • Preferences Datastore
  • Dependency Injection with Hilt
  • Gradle Kotlin DSL
  • Gradle Version Catalog
  • Convention Plugin

Architecture

This template follows the official architecture guidance suggested by Google.

Modularization

Modularization

Building

Debug

This project requires Firebase for analytics. Building the app requires google-services.json to be present inside the app dir. This file can be generated from the Firebase Console. After that, run the following from the terminal.

$ ./gradlew assembleDebug

Or, use Build > Rebuild Project.

Release

Building the release version requires a Keystore file in the app dir. Also, a keystore.properties file needs to be created in the rootDir.

storePassword=****
keyPassword=*****
keyAlias=****
storeFile=keystore file name (e.g., key.jks)

After that, run the following from the terminal.

$ ./gradlew assembleRelease

Qatar University Machine Learning Group