# Pengenalan
Halo semua, kali ini saya akan menuliskan pengalaman saya dalam mengurangi ukuran aplikasi android yang dibuat menggunakan expo/react-native. Sebenarnya artikel ini hanya menterjemahkan apa yang sudah saya publish di Dev.to dengan judul A Tale of Reducing Expo/React Native Android Application (opens new window).
Oke, sebelumnya mari melihat development environment yang saya gunakan. Saya menggunakan Lubuntu 20.04 focal
, dengan Desktop Environment LxQt 0.14.1
seperti yang tertera di gambar bawah ini. Bagi rekan-rekan yang menggunakan Windows, kurang lebih langkahnya sama.

Setelah mengalami banyak error, akhirnya saya berhasil mengurangi aplikasi android yang saya buat dari 52MB menjadi 27MB, penurunan sebanyak 49%! Dan setelah mengetahui error-error apa saja yang saya hadapi, saya tulis artikel ini dengan harapan rekan-rekan bisa mengurangi error yang ada.
# Requirements
Ada beberapa paket/aplikasi yang harus disiapkan yaitu sebagai berikut, jika kalian menggunakan Windows cukup install Java dan SDK atau langsung install Android Studio. Namun karena saya menggunakan Ubuntu, persiapannya agak berbeda.
# Install JRE
sudo apt-get install default-jre
Cek instalasi
java -version
# Install JDK
sudo apt-get install defalut-jdk
Cek instalasi
javac -version

# Install Expo Command Line
sudo npm install --global expo-cli
# Install Android Command Line Tools
sudo export ANDROID_HOME=/usr/lib/android-sdk
sudo wget https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip
sudo unzip commandlinetools-linux-6609375_latest.zip -d cmdline-tools
sudo mv cmdline-tools $ANDROID_HOME/
sudo export PATH=$ANDROID_HOME/cmdline-tools/tools/bin:$PATH
# Mengatur lisensi dari sdk
Pergi ke folder /usr/lib/android-sdk/
cd /usr/lib/android-sdk/
Kita harus menyetujui semua lisensi dari sdk sebelum menggunakannya
sudo yes | sdkmanager --licenses
Serta kita perlu mengatur ulang permission dari folder /tmp
untuk menghindari masalah permission
sudo chmod -R 0777 /tmp
# Aksi
Langkah pertama yang harus rekan-rekan lakukan adalah membuka folder project expo/react-native yang ingin di kurangi ukuran aplikasinya menggunakan terminal. Pastikan rekan-rekan mencadangkan terlebih dahulu file-file tersebut.
# Eject project
Jalankan perintah berikut untuk meng-eject file project expo ke dalam folder android dan iOs.
expo eject
Rekan-rekan akan diberikan beberapa pertanyaan, cukup isikan sesuai dengan informasi project yang ada. Setelah selesai, akan ada 2 folder baru yaitu android dan iOs.
# Buat file local.properties
Pergi ke folder android
dan buat file baru dengan nama local.properties
. File ini akan digunakan untuk menunjukkan lokasi sdk ke gradle saat mem-build
aplikasi.
cd android
touch local.properties
sudo nano local.properties
Buat variable sdk.dir
seperti berikut
sdk.dir = /usr/lib/android-sdk/

Ctrl + O
, Enter
, Ctrl + x
untuk menyimpan dan keluar dari teks editor nano.
# Membuat keystore
Selanjutnya ke folder android/app
pada terminal dan buat sebuah keystore sehingga kita bisa mem-publish aplikasi kita ke Google Play Store.
cd android/app
sudo keytool -genkey -v -keystore yourkeyname.keystore -alias yourkeyaliasname -keyalg RSA -keysize 2048 -validity 10000
Ganti yourkeyname
dan yourkeyaliasname
dan rekan-rekan akan ditanyai password untuk keystoremu dan beberapa pertanyaan. Pastikan rekan-rekan mencatat passwordnya supaya tidak lupa.
Setelah selesai, sebuah file baru akan muncul dengan ekstensi (.keystore). Itu adalah keystore rekan-rekan.
# Mengubah gradle.properties
Sekarang kembali ke direktori sebelumnya dan ubah file gradle.properties
.
cd ..
sudo nano gradle.properties
Tambahkan script berikut
MYAPP_UPLOAD_STORE_FILE=yourkeyname.keystore
MYAPP_UPLOAD_KEY_ALIAS=yourkeyaliasname
MYAPP_UPLOAD_STORE_PASSWORD=yourkeypassword
MYAPP_UPLOAD_KEY_PASSWORD=yourkeypassword
org.gradle.jvmargs=-Xmx4096m
2
3
4
5

Ganti yourkeyname
, yourkeyaliasname
dan yourkeypassword
sesuai dengan keystore yang telah kalian buat lalu simpan.
# Mengubah build.gradle
Sekarang, pergi ke folder app
dan ubah file build.gradle
.
cd app
sudo nano build.gradle
Ubah baris berikut dari false
ke true
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
2

Scroll ke bawah ke bagian signingConfigs
dan tambahkan konfigurasi berikut dibawah debug
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
2
3
4
5
6
7
Lalu, di bagian buildTypes
cari kurung kurawal release
dan ubah baris berikut (gunanya untuk merilis aplikasi kita pada versi release bukan versi percobaan/debug)
signingConfig signingConfigs.debug
menjadi
signingConfig signingConfigs.release
dan tambahkan baris berikut dibawah minifyEnabled
shrinkResources true

# Lainnya
Lalu scroll ke bawah ke baris paling akhir, tambahkan kurung kurawal penutup }
. Tanpa kurung ini rekan-rekan akan mengalami error
.

Terakhir, jika rekan-rekan ingin mem-build file .apk secara universal, maka scroll ke atas dan cari kata splits
, lalu di dalam abi
ubah universalApk
dari false
ke true
. Lalu simpan.

# Build aplikasi
Sekarang semua sudah siap, waktunya mem-build. Kembali ke folder android
di mana ada file dengan nama gradlew
. Ubah user di terminal menjadi superuser, untuk menghindari permasalahan permission.
cd ..
sudo su
Jika rekan-rekan ingin mem-build file .apk
, jalankan perintah berikut
./gradlew assembleRelease
atau jika rekan-rekan ingin mem-build menjadi file .aab
, jalankan perintah berikut
./gradlew buildRelease
Dalam kasus saya, membutuhkan 5-18 menit tergantung spek komputer dan besarnya project rekan-rekan. Hasilnya akan berada di folder app/build/outputs/apk/release
untuk file .apk
dan app/build/outputs/bundle/release
untuk .aab
.
Tips Publish Google Play Store
Jika rekan-rekan punya aplikasi android yang tidak butuh izin atau permission
apapun, pastikan sebelum mem-build buka file AndroidManifest.xml
di folder android/app/src/main
lalu hapus kode yang mengandung keyword use permission
.
Oke, mungkin itu saja, terima kasih telah membaca. Semoga bermanfaat.
Selamat malam~