Konfigurasi Build Variants di Android Studio
 
 
 
K

ali ini saya mau sharing bagaimana caranya memanfaatkan fitur Build Variants pada android studio ketika kita sedang mendevelop aplikasi android. Fungsi dari fitur ini salah satunya adalah kita jadi bisa menginstal aplikasi android yang memiliki dua jenis yang berbeda (production dan staging) sehingga dalam device yang kita gunakan terinstal kedua jenis aplikasi tersebut tanpa harus menimpa satu sama lain. Dan keuntungan lainnya kita jadi tidak perlu mengganti (hardcode) base url API yang tentunya perlu terus menures diganti sesuai dengan kebutuhan (kebutuhan develop ataupun permintaan client). Sebenarnya awal saya menggunakan fitur ini karena permintaan client yang ingin aplikasinya dalam mode production tetap terinstal pada devicenya sembari progres (baik itu perbaikian atau penambahan fitur) aplikasi yang terdapat pada mode staging juga tetap bisa dimonitor. Oke, karena fitur ini cukup berguna jadi saya coba share aja dan sebagai catatan untuk saya juga jika sewaktu-waktu saya lupa ghahahah :v, semoga bermanfaat.

Hal pertama yang mesti kita lakukan adalah membuat file properties terlebih dahulu yaitu dengan cara mengubah mode Android menjadi Project.

ubah editor

Kemudian pada directory app buat file endpoint.properties (atau terserah apa aja). Caranya, klik kanan pada directory app kemudian pilih New dan dilanjutkan dengan memilih File.

tambah file poperties

Isi field yang muncul dengan endpoint.properties

tambah file poperties

Kemudian isi file endpoint.properties tadi dengan code berikut:

STAGING_URL_API="https://api.staging.com"

PRODUCTION_URL_API="https://api.production.com"

Setelah tahap sebelumnya selesai, kemudian kita kembalikan ke mode Android untuk memudahkan nantinya. kemudian dilanjutkan dengan memilih file gradle (build.gradle (Module.app)).

gradle

Kemudia kita masukkan code berikut dalam block Android.

// Define the endpoint strings
def endpointFile = file('endpoint.properties')
def Properties endpointProperties = new Properties()
endpointProperties.load(new FileInputStream(endpointFile))

// Specify the build flavors
productFlavors {
    staging {
        applicationIdSuffix '.staging'
        versionNameSuffix "-staging"

        buildConfigField 'String', 'M_API_URL', endpointProperties['STAGING_URL_API']
    }

    production {
        buildConfigField 'String', 'M_API_URL', endpointProperties['PRODUCTION_URL_API']
    }
}

Sehingga secara keseluruhan file Gradle akan terlihat seperti berikut:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "w174rd.com.buildvariants"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    // Define the endpoint strings
    def endpointFile = file('endpoint.properties')
    def Properties endpointProperties = new Properties()
    endpointProperties.load(new FileInputStream(endpointFile))

    // Specify the build flavors
    productFlavors {
        staging {
            applicationIdSuffix '.staging'
            versionNameSuffix "-staging"

            buildConfigField 'String', 'M_API_URL', endpointProperties['STAGING_URL_API']
        }

        production {
            buildConfigField 'String', 'M_API_URL', endpointProperties['PRODUCTION_URL_API']
        }
    }


    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

Sebenarnya sampai tahap di atas, fitur Build Variants sudah bisa digunakan tapi agar nama aplikasi yang kita install pada device memiliki nama yang berbeda baik itu untuk jenis staging maupun production (Agar tidak bingung nantinya) Sehingga tahapan selanjutnya adalah memberikan nama tambahan untuk file strings.xml pada mode staging, caranya sebagai berikut:

Buat file strings.xml di dalam directory/folder app › src › staging › res › values (Buat folder staging › res › values). sehingga untuk strukturnya akan terlihat seperti gambar dibawah ini.

struktur string

Selanjutnya masukkan code berkut pada file strings.xml yang sudah kita buat sebelumnya.


    (Staging) Build Variants

Selanjutnya kita coba dengan meruning aplikasi dalam mode staging maupun production dengan memilih tab Build Varinats (yang ada di sebelah kiri layar *lihat gambar). kemudian pilih mode stagingDebug atau productionDebug *lihat gambar.

testing Build variants

Sementara untuk mempergunakan string yang ada di file properties kita gunakan kode BuildConfig.M_API_URL. Code tersebut akan menampilkan informasi tergantung pada mode apa yang kita pilih. Dan untuk lebih jelas lagi saya akan menampilkan informasi strings.xml dan endpoint.properties yang telah dibuat sebelumnya dalam mode yang kita pilih. Maka ada beberapa perubahan pada code java dan layoutnya (tergantung project), karena di sini saya menggunakan contoh maka nama dari classnya adalah MainActivity.java dan layoutnya yaitu main_activity.xml

MainActivity.java

package w174rd.com.buildvariants;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView apiUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        apiUrl = (TextView) findViewById(R.id.url_api);

        apiUrl.setText(BuildConfig.M_API_URL); // untuk menampilkan base url pada file properties
    }
}

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="w174rd.com.buildvariants.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/app_name"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/url_api"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="50dp"
            android:text="@string/app_name"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Coba kita runing kembali baik itu pada mode staging atau pada mode production.

Tampilan yang muncul pada mode production.

Mode Production

Tampilan yang muncul pada mode Staging.

Mode Staging

Bisa kita lihat pada dua gambar di atas, bahwa nama aplikasi dan base url api yang ditampilkan berubah tergantung mode yang kita gunakan. Dan tidak hanya nama aplikasinya saja yang bisa disesuaikan, untuk icon launchernya juga bisa disesuaikan sehingga kita tidak bingung aplikasi yang mana yang kita buka pada device apakah staging atau production. Dan caranya pun hampir sama ketika kita mau membedakan nama aplikasi yaitu dengan menambahkan beberapa folder dan icon pada folder staging. silahkan coba sendiri saja ya! karena caranya pun cukup mudah, Tinggal samakan saja struktur folder main sama stagingnya hahahah. Demikian postingan cupu dari saya semoga bermanfaat. Untuk melihat Source Code yang lebih jelas silahkan lihat di link di bawah.

Kata kunci:

#Android#programming#Build Variants#Android Studio#java

 


    Jadilah Orang Pertama yang Berkomentar!!!