Membangun Aplikasi Android dengan Python Kivy

Kzulfazriawan 9 Agustus 2018

Membangun Aplikasi Android dengan Python Kivy

Apa Itu Kivy?

Bukan, Kivy yang penulis maksud bukanlah burung atau buah (Kiwi) melainkan framework Python untuk membangun aplikasi berbasis NUI dengan ringkas, cepat dan mudah. Berbasis lisensi MIT, framework yang satu ini bisa jalan hampir disemua platform seperti Windows, Linux, iOS, Android dan Raspberry.

alt text

Oke kali ini penulis akan langsung membawa pembaca ke tahap koding untuk membuat aplikasi sederhana dengan menggunakan framework Kivy, tapi sebelumnya ada beberapa hal yang dibutuhkan oleh pembaca untuk mengikuti tutorial ini seperti:

  1. Dasar pemrograman Python atau Python3
  2. Python Editor (PyCharm, Geany, Komodo Edit)
  3. Library Kivy build terakhir

Membangun Applikasi Konversi Desimal ke Biner,Oktal,dan Hexa Sederhana.

1. Widget Dasar App

Di dalam tutorial ini penulis menggunakan Python3 dan PyCharm, juga penulis menggunakan virtualenv untuk menyimpan interpreter penulis sendiri secara custom. Oke, hal yang pertama kita lakukan adalah membuat dasar Widget Class Kivy kita, untuk layouting penulis menggunakan GridLayout yang sudah disediakan kivy karena lebih mudah layout tersebut sangat mudah diatur orientasinya, baris, dan kolom hampir sama seperti bentuk table.

from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.properties import NumericProperty from kivy.properties import StringProperty class CalculatorConverter(GridLayout): """ Class CalculatorConverter ========================= Kelas ini yang akan menjadi layout utama pada Applikasi. diantara layout yang tersedia kita akan menggunakan GridLayout karena mudah diatur seperti layouting table ada row dan kolom. juga disini ada default variable dan variable initial pada Class Layout kita. """ # variable default dan input variable dari TextInput Kivy. input_type = 2 input_value = NumericProperty() # hasil output dari konverter, tetapi di deklarasi sebagai tipe String binary_result = StringProperty() octal_result = StringProperty() decimal_result = StringProperty() hexa_result = StringProperty() def converting(self, value): """ def converting ============== fungsi ini akan merubah input dari user menjadi keluaran yang telah di konversi sesuai dengan tipe konversi input, beberapa diantaranya me-representasikan - 2 = biner, 8 = oktal, 10 = desimal, 16 = hexadesimal bilangan ini diambil dari jumlah byte yang tertera pada input lalu tiap fungsi ini ke-trigger maka akan mengkonversi hasil. ============== :param value: :return: """ if self.input_type in [2, 8, 10, 16]: try: d = int(str(value), self.input_type) except ValueError: # Kalo valuenya gak sesuai maka di biarin aja pass else: # Yang paling penting itu kita ubah dulu ke desimal # sisanya kita bisa format dengan python. self.decimal_result = str(d) self.binary_result = '{:0b}'.format(d) self.octal_result = '{:0o}'.format(d) self.hexa_result = '{:0x}'.format(d) # Dump result ke console print("===============================================") print("BINER = %s" % self.binary_result) print("DESIMAL = %s" % self.decimal_result) print("OKTAL = %s" % self.octal_result) print("HEXA = %s" % self.hexa_result) print("===============================================") class ConverterApp(App): def build(self): return CalculatorConverter() if __name__ == '__main__': ConverterApp().run()

Kita juga perlu membuat buat file KV-nya, file kv ini bersifat seperti CSS juga didalam web development tetapi bedanya bahasa KV ini mirip dengan YAML. oke langsung aja ini kode untuk file KV kita:

#:kivy 1.0

<CalculatorConverter>:
  # Class layout utama yang udah dibuat didalam main.py
  # buat jadi 1 kolom, jadi rownya bisa berderet
  cols: 1

  Label:
    size_hint: 1, .1
    text: 'Tutorial CodePolitan Kivy'

  TextInput:
    # Input text yang dipake buat masukin angka yang bakal
    # di konvert nanti.
    # fungsi converting yang udah kita buat di class parent
    # bakalan di trigger tiap kali kita mengetik angka diinput
    size_hint: 1, .23
    on_text: root.converting(args[1])

  GridLayout:
    # Grid layout disini buat ngerapihin tombol tombol tipe konverter kita
    # buat jadi 4 kolom untuk masing masing tombol.
    cols: 4
    size_hint: 1, .22

    # pakai toggle button untuk toggling konverter,
    # tiap ke state tombol ini bakal ngerubah tipe byte yang ada
    # di class parent.
    ToggleButton:
      text: 'Bin'
      group: 'cal_tog'
      state: 'down'
      on_state: root.input_type = 2
      allow_no_selection: False

    ToggleButton:
      text: 'Oct'
      group: 'cal_tog'
      on_state: root.input_type = 8
      allow_no_selection: False

    ToggleButton:
      text: 'Dec'
      group: 'cal_tog'
      on_state: root.input_type = 10
      allow_no_selection: False

    ToggleButton:
      text: 'Hex'
      group: 'cal_tog'
      on_state: root.input_type = 16

Simpan kode tersebut sebagai converter.kv, nama file tersebut wajib sama dengan nama class App kita yaitu ConverterApp tapi dan ini wajib kalau memang ingin file kv kita terdeteksi secara otomatis oleh script Kivy, dan juga path file kv kita harus sejajar dengan file main.py yang kita buat sebelumnya. Setelah itu coba jalankan di terminal kita. kalau sukses maka akan keluar window seperti ini: alt text

Jika kita input bilangan maka hasil konversi tersebut akan ke dump didalam terminal kita seperti ini:

alt text

Sebagai bagian penutup dari kode yang kita buat, untuk menampilkan hasil konversi yang tadi kita buat didalam terminal sekarang dipindahkan kedalam window Kivy. Jangan lupa hapus print yang ada didalam fungsi konversi kita, berikut kode yang akan kita sisipkan didalam converter.kv:

  GridLayout:
    # Hasil dari dump tadi kita buat 1 layout terakhir
    # yang berisikan label label.
    size_hint: 1, .45
    cols: 1

    Label:
      text: '[size=24]BINER   = ' + str(root.binary_result) + '[/size]'
      markup: True
    Label:
      text: '[size=24]DESIMAL = ' + str(root.decimal_result) + '[/size]'
      markup: True
    Label:
      text: '[size=24]OKTAL   = ' + str(root.octal_result) + '[/size]'
      markup: True
    Label:
      text: '[size=24]HEXA    = ' + str(root.hexa_result) + '[/size]'
      markup: True

Jalankan script kita maka windownya seperti ini:

alt text

2. Deploy ke Android

buat deploy ke android kita bisa menggunakan buildozer untuk mengcompile applikasi kivy yang sudah dibuat sebelumnya, tapi sebelum itu Kivy juga sudah menyediakan Kivy launcher untuk android, bisa didownload di playstore https://play.google.com/store/apps/details?id=org.kivy.pygame&hl=in.

2.1 Testing sebelum deploy

Setelah kalian download kivy launcher di android kalian kalian bisa copy folder project kivy kita kedalam, folder sdcard android, penulis membuat sebuah folder bernama kivy didalam sdcard (storage utama smartphone), sebelum kalian copas folder project kalian buat dahulu sebuah file txt bernama android.txt dan isi dengan variable berikut:

title=<Nama Applikasi kalian>
author=<Nama Kalian>
orientation=<portrait|landscape>

save file android.txt lalu copas folder project kedalam folder kivy. kemudian test di smartphone kalau sukses maka tampilannya kurang lebih seperti ini:

alt text

2.2 Deploy ke android package

Sebelum mulai membuat package android(apk) kalian harus menginstall dahulu Buildozer, dan CrystaX android NDK(khusus untuk Python 3). informasi installasi buildozer ada didalam README git reponya, setelah install jalankan buildozer init untuk inisiasi konfig dari buildozer, isi nama applikasi kalian, dan nama package, jangan lupa juga log_levelnya diset menjadi 2 untuk informasi debugging lebih lengkap. lalu jalankan perintah buildozer android debug deploy run, secara otomatis terminal akan mendownload NDK,SDK dan ANT untuk android(kecuali NDK dari CrystaX). dan final output dari terminal jika proses build package sudah selesai, kurang lebih seperti ini:

alt text

Setelah itu kalian bisa pindahkan APK kalian, kedalam smartphone untuk diinstall atau di upload ke playstore. Source code-nya bisa di-download di GitHub penulis.