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
.
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
.
Isi field yang muncul dengan endpoint.properties
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))
.
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.
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.
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="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://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.
Tampilan yang muncul pada 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:
Hamba Allah
20 okt 2017 pukul 09:52
Thanks gan. ngebantu banget ni tutorial buat kerjaan saya.