Saveurs Android avec différentes ressources.

Apr 18 2023
Si vous créez une version, vous aurez peut-être besoin d'un fichier de ressources différent pour chaque version. Aujourd'hui, nous allons apprendre comment configurer une saveur avec un fichier de ressources différent.

Si vous créez une version, vous aurez peut-être besoin d'un fichier de ressources différent pour chaque version. Aujourd'hui, nous allons apprendre comment configurer une saveur avec un fichier de ressources différent.

Tout d'abord, définissons ce qu'est une saveur. Dans le développement Android , une saveur est une variante de la même application qui peut avoir des fonctionnalités, des configurations ou des comportements différents. Les versions peuvent être utilisées pour créer plusieurs versions d'une application pour différentes régions, clients ou environnements.

Dans cet exemple, supposons que nous voulions créer deux versions de notre application : une version gratuite et une version payante. La version gratuite aura des publicités, tandis que la version payante sera sans publicité et aura quelques fonctionnalités supplémentaires.

Pour créer les deux versions, nous devons apporter quelques modifications au fichier build.gradle de notre projet. Ouvrez le fichier et ajoutez le code suivant dans le bloc Android :

android {
    // ... 

    flavorDimensions "version"
    productFlavors {
        free {
            applicationIdSuffix ".free"
            versionCode 1
            versionName "1.0"
            resValue "string", "app_name", "Free App"
            manifestPlaceholders = [
                    appIcon     : "@mipmap/ic_launcher_free",
                    appIconRound: "@mipmap/ic_launcher_free_round"
            ]
            buildConfigField 'String', 'BASE_URL',  "\"www.freeurl.com\""
        }
        paid {
            applicationIdSuffix ".paid"
            versionCode 1
            versionName "1.0"
            resValue "string", "app_name", "Paid App"
            manifestPlaceholders = [
                    appIcon     : "@mipmap/ic_launcher_paid",
                    appIconRound: "@mipmap/ic_launcher_paid_round"
            ]
            buildConfigField 'String', 'BASE_URL', "\"www.paidurl.com\""
        }
    }

  • flavorDimensionsdéfinit la dimension que nous utilisons pour différencier les saveurs. Dans ce cas, nous utilisons "version".
  • productFlavorsdéfinit les deux saveurs que nous créons : "gratuit" et "payant".
  • dimensionassocie chaque saveur à la dimension que nous avons définie précédemment.
  • applicationIdspécifie le nom de package unique pour chaque saveur. Dans ce cas, nous ajoutons ".free" et ".paid" à la fin du nom du package de l'application pour différencier les deux versions.
  • versionCodeet versionNamespécifiez le numéro de version pour chaque saveur.
  • buildConfigFieldajoute un champ à la classe BuildConfig qui indique si l'application est la version payante ou non.

Après avoir basculé votre application au niveau du projet, créez un dossier avec chaque nom de version dans le dossier app/src . Par exemple - j'ai créé deux saveurs, c'est-à-dire gratuite et payante, j'ai donc créé deux dossiers.

Maintenant, vous devez penser que [main] est écrit devant le dossier free Parce que j'ai sélectionné la variante freeDebug parmi les variantes de construction.

Après avoir sélectionné la variante Build, créez un dossier res dans votre dossier de saveur, puis dans le dossier res, créez tous les dossiers que vous souhaitez en fonction de vos besoins.

Maintenant, si vous souhaitez modifier la disposition, le dessin et les couleurs particuliers, vous devez copier les ressources dans le dossier des ressources de saveur.

N'oubliez pas que ce nom doit être le même que celui de tous les fichiers de ressources de type.

Passons maintenant au côté code.

activity_main.xml (version gratuite)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Welcome to Free flavor"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:layout_marginTop="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:srcCompat="@drawable/ic_app_logo"
     />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="88dp"
        android:text="Free Flavor Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="@+id/imageView"
        app:layout_constraintTop_toBottomOf="@+id/imageView" />

</androidx.constraintlayout.widget.ConstraintLayout>

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Welcome to Paid Flavor"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="76dp"
        android:text="Paid Flavor Button 1"
        app:layout_constraintEnd_toEndOf="@+id/imageView"
        app:layout_constraintStart_toStartOf="@+id/imageView"
        app:layout_constraintTop_toBottomOf="@+id/imageView" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Paid Flavor Button 2"
        app:layout_constraintEnd_toEndOf="@+id/imageView"
        app:layout_constraintStart_toStartOf="@+id/imageView"
        app:layout_constraintTop_toBottomOf="@+id/button" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="250dp"
        android:layout_marginTop="23dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:srcCompat="@drawable/ic_app_logo" />

</androidx.constraintlayout.widget.ConstraintLayout>

      
                
while selecting build variants you will notice that the image is changing while switching via build variant.

Pour référence:https://github.com/surajnegi8909/CreateFlavor.git