Kivy Kurulumu ve APK Derleme Hakkında Başlangıç Rehberi

Kivy apk derleme hatalarıyla bayağı boğuştum ve şu an çözdüm. Kaç kez sildim yükledim bir şeyler denedim hatırlamıyorum. Benzer sorunları yaşayan arkadaşlar için birkaç önemli hususu bildirmek ve temiz kurulum için bir rehber sunmak istiyorum. Burada bahsettiğim adımları Pardus 23.2 XFCE üzerinde uyguladım. Debian tabanlı sistemlerde, Ubuntu’da da uygulanabilir.

  1. Kivy KURULUMU: Kurulum yönergelerini takip ederken mutlaka resmi dökümantasyona göre ilerleyecez. İnternetten, ordan burdan bulunan tavsiyelere göre kurulum yapmayın. Dökümantasyonda tavsiye edildiği üzere sanal ortam (virtual environment) üzerinde çalışmalarımızı yapacaz. Aşağıdaki adımları dikkatlice uygulayalım;

    1.a. Terminal açıp aşağıdaki komutları sırasıyla uygulayarak kivy_venv adında sanal ortam oluşturalım.
    sudo apt install python3-venv
    python3 -m venv kivy_venv

    1.b. Oluşturduğumuz sanal ortamımızı aktif hale getirelim.
    source ~/kivy_venv/bin/activate
    Artık terminal satırınızın en başında sanal ortamınızın adı (kivy_venv) görünüyor olmalı. Bu sanal ortamınızın aktif edildiği anlamına geliyor. Bu adımından sonra artık paket kurulumlarımızı ve çalışmalarımızı kivy_venv ortamında yapacaz. Bu ortam içerisindeki Python derleyicisini kullanarak projelerimizi çalıştıracaz.

    1.c. Sanal ortamımızı aktif ettiğimize göre artık Kivy’i yükleyelim.
    pip3 install "kivy[full]" kivy_examples
    bu adımla birlikte Kivy, bağımlılıkları ile beraber, ses ve video desteği ayrıca çeşitli başlangıç örnekleri ile ortamımız içerisine yüklenmiş olacaktır.

    1.d. Aşağıdaki kod ile sanal ortamımıza yüklenen Kivy başlangıç örneklerinden birini çalıştırarak test edelim.
    ~$ python3 ./kivy_venv/share/kivy-examples/demo/showcase/main.py bu kod neticesinde Kivy bileşenlerinin sergilendiği bir uygulamanın açıldığını göreceksiniz. Uygulama penceresini kapatalım.
    NOT: Terminale deactivate yazarak aktif edilmiş ortamı tekrardan pasif hale getirebilirsiniz.
    Artık terminali kapatabiliriz.

  2. EDITÖR AYARLARI ve İLK UYGULAMA - “Merhaba Dünya”: Kendimiz basit bir Merhaba Dünya örneği yapalım. Ben kod yazmak için VS Code editörünü kullanacam. Siz dilediğiniz editörü/IDE’yi kullanabilirsiniz. Sisteminizin uygulama mağazasından ya da paket yöneticinizden VS Code editörünü yükleyebilirsiniz. Yeni bir klasör oluşturun, klasör ismi küçük harfli, boşluksuz ve ingilizce alfabedeki karakterlerden oluşsun (nolur nolmaz :sweat_smile:). Klasörün içine girip burada terminal açıp code . komutunu uyguluyoruz. Böylece VS Code bu klasörü görerek açılıyor. main.py adında (isim main.py olmalı, dökümantasyonda yazıyor!) yeni bir python dosyası oluşturun. Aşağıdaki kodları sırasıyla yapıştırıp kaydedelim.

from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):
    def build(self):
        return Label(text="Merhaba Dünya")


if __name__ == "__main__":
    MyApp().run()
  1. .
    2.a. Dikkat etmeniz gereken, kullandığınız editörde yazdığınız Python&Kivy uygulamasını çalıştırmadan önce, python interpreter (python yorumlayıcısı) olarak 1.a. adımında oluşturduğumuz sanal ortam (kivy_venv) içerisindeki Python3 seçilmelidir. Bunu yapmak için Ctrl+Shift+P tuş kombinasyonu ile ya da Help/Show All Commands yolu ile VS Code’da komut penceresini açın. Arama kısmına Python: Select Interpreter yazın ve tıklayın. Yukarıda açılan pencerede “Enter interpreter path…” seçeneğinde tıklayın. “Find” seçeneğini seçin. Açılan pencerede kullanıcı dizini (home) içerisinde kivy_venv/bin/python3.11 dosyasına çift tıklayarak seçin (Bende 3.11 sürümü var, siz kendi sürümünüzü seçin). Bunu doğru yaptıysanız VS Code editöründe Ctrl+J tuş kombinasyonu ile açılan pencere Terminal sekmesine tıklayın. Gördüğünüz satırın en başında aşağıdaki resimde olduğu gibi (kivy_venv) yazıyor olmalı. Eğer satır başında sanal ortamınızın adı hala görünmüyorsa şu an açmış olduğunuz VS Code terminalinde hemen source ~/kivy_venv/bin/activate komutunu uygulayın. Aşağıdaki gibi görünmeli.


    2.b. VS Code editörünün sağ üstünde görünen üçgen (Run) butonuna tıklayın. Uygulamanın sorunsuz açılması gerekiyor.

  2. ANDROID APK OLUŞTURMA: Kivy dökümantasyonunda bunun için buildozer kullanılabileceği yazıyor, buildozer’in dökümantasyonuna yönlendiriyor. Biz de o dökümantasyondan ilerleyecez. Dökümantasyonda görünen adımları dikkatle uygulayacağız. buildozer’in sorunsuz çalışması için sisteminizdeki Java versiyonunun openjdk-17 olması gerekiyor. Minimum openjdk-11 kullanmalı, daha alt versiyon kullanmamalısınız…!

    3.a. buildozer’i sanal ortamımıza (kivy_venv) yükleyelim. Sanal ortama yükleme yaparken dökümantasyonda belirtilen --user kodu kullanılmayacak. Aşağıdaki komutu VS Code terminal ekranından uygulayarak yüklemenizi yapın.
    pip3 install --upgrade buildozer

    3.b. Sistemimizdeki paketlerimizi güncelleyip, gerekli bağımlılıkları yükleyip ortam değişkenlerimizi ayarlayalım. Aşağıdaki komutları VS Code terminalinde sırasıyla çalıştırın.

sudo apt update
sudo apt install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev
pip3 install --upgrade Cython==0.29.33
  1. 3.c. Kullanıcı dizininizde bulunan .bashrc dosyasını bir metin editörü (Mousepad, gedit vb.) ile açarak en altına aşağıdaki kod satırını ekleyin. .bashrc gizli dosya olduğu için kullanıcı dizinine girdikten sonra Ctrl + H ile görebilirsiniz.
    export PYTHONPATH=/home/kivy_venv/lib/python3.11/site-packages/
    (Yukarıda görünen python3.11 sürüm numarsı sizde farklı çıkabilir. Kendi sisteminizdeki yolu takip edin, bu konuyu yazdığım tarihte bende bu yazıyor.)

    3.d. Artık apk dosyası oluşturabiliriz. Dökümantasyonda bahsettiği gibi öncelikle;
    buildozer init komutunu VS Code üzerinden terminalde uygulayalım. Bu kod buildozer.spec isimli bir dosya oluşturacak. Bu dosyada derleme ve bazı ayarlamalar için parametreler var. Ne anlama geldiğini görmek için buraya bakabilirsiniz.

    3.e. Şimdi debug yapalım. buildozer -v android debug komutu ile proje dosyanız içerisinde bin klasörü altında bir apk oluşacak ama ilk etapta bu iş çok uzun sürüyor. SDK, NDK vs. bir ton yükleme yapılacak. Sonraki aşamalarda bu iş uzun sürmeyecek, ilk sefere mahsus böyle. Ekranın sonunda kırmızı renkli hatalar aldıysanız stackoverflow 4 gözle sizi bekliyor :laughing:. Bu aşamada ben gerçekten çok boğuştum, internet aramalarımda genel olarak Cython sürüm uyuşmazlığı olduğu, proje klasör isminde boşluk olduğu gibi şeyler var. Yukarıdaki kuruluma uyduysanız bende çalıştı, umarım sizde de çalışır.

    3.f. Yukarıdaki adımda hata almadıysanız telefonu geliştirici moduna alıp USB kablosu ile USB Hata Ayıklama modundan bilgisayarınıza bağlayın. Şimdi VS Code editöründen buildozer android deploy komutunu çalıştıralım. Uygulama telefonunuza yüklenecektir. Bu aşamada eğer adb devices unauthorized diye bir hata görürseniz aşağıdakileri yapın.

  • Kullanıcı ev dizininde .android klasörü içinde adbkey ile adbkey.pub isimli dosyaları silin (Bkz. kaynak). (.android dizini gizlidir. Ev dizininide Ctrl + H yapmayı unutmayın.)
  • Bu videoda gösterilen adımı uygulayıp 3.f. adımındaki komutu tekrar çalıştırın.

Gerçekten çok sıkıntılı, ama inat edip yaptıktan sonra keyifli oluyor. Başarılar arkadaşlar.

BAZI ÖNERİLER

  • ChatGPT’den yardım/öneri alabilirsiniz.
  • Bazen uygulamanız sisteminizde düzgün çalışıyor iken telefonunuzda hata verip çökebilir. Logcat çıktılarını mutlaka inceleyin.
  • Uygulamanızın telefonda çökmesinin bir nedeni de sizin sanal ortamınızda kullandığınız kivy ve diğer modül/paketlerin versiyonları ile buildozer uygulamanızı derlerken o an indirdiği modül/paketlerin versiyonlarının farklı olması olabilir. Bunu garantiye almak için VS Code üzerinde Ctrl+J ile terminali açtığınızda pip3 list komutunu uygulayın. Sanal ortamınızda kurulu olan modül ve versiyonlarını göreceksiniz. Örneğin bende pyOpenSSL’nin 24.2.1 nolu versiyonu mevcutmuş. Yukarıda 3.d adımında .spec dosyasının oluştuğundan bahsetmiştik. Bu dosyada uygulamamızda kullanacağımız paketleri belirtmek için requirements ile başlayan satırı requirements = python3,kivy,pyOpenSSL olarak güncelliyoruz normalde. İşte burada pyOpenSSL modülü derleme esnasında indirilirken sizin kivy_venv’deki sürüm ile aynı olsun istiyorsanız bu satırı requirements = python3,kivy,pyOpenSSL==24.2.1 olarak yazmalısınız. (Bu arada pip3 list komutu ile gördüğünüz her paketi requirements içine eklemenize gerek yok. Uygulamayı çalıştırdığınızda, logcat kayıtlarında modül bulunamadı hatası alırsanız o zaman bunu yapmanız gerektiğini anlarsınız.)
4 Beğeni

Zamanında telefonuma editör kurup, saatlerce dökümanlarını okuyup öğrendiklerimi o kısıtlı editörde deneyecek kadar çok uğraşmıştım Kivy ile. Şu anda halen var olan ama kesinlikle güncelliğini yitirmiş olan Kivy dökümanlarını da ben yazmıştım.

Bırakalı çok oldu, ama bu apk derleme olayı yüzünden çok zaman kaybetmiştim. Çok fazla bağımlılık gerektiren bir işlem olduğundan, bağımlılıklardan bir tanesi güncellendiğinde sistem hepten bozuluyordu. Sanal makine içinde sanal ortam kurdurmalarının sebebi de bu işte :smiley: İşletim sisteminde çalışan başka bir uygulama C kütüphanelerini günceller, başka bir Python modülü buildozer’in de bağımlı olduğu kütüphaneyi günceller falan resmen pamuk ipliğine bağlı olan derleme sisteminizi hepten bozar. Hele şu Android SDK’nın “ben kendimi güncelleyeceğim bana ne” inadı işin içine girdiğinde sinir krizi geçirirsiniz.

Bütün bu uğraşlar içerisinde zamanımı Java veya Kotlin ile Android geliştirmeye ayırsaydım daha iyi olurdu. Hatta bi keresinde oturup Android Studio kurmuştum ve basit bir hello world programının dakikalar içinde sorunsuz derlendiğini görünce bir süre boş boş ekrana bakmıştım boşa giden günlerimi düşünerek :d. Saatlerden değil resmen günlerden bahsediyoruz.

Elinize sağlık, anılarımı depreştirdiniz :sweat_smile:

1 Beğeni

Emeğine sağlık hocam

1 Beğeni

Android geliştirme için sırasıyla Java, Kotlin ve Dart/Flutter kursları bitirdim. En çok illet olduğum Java’ydı. Kotlin bana Java ile Python arası birşey gibi geldi syntax olarak. Yani yapı Java’ya benziyor, ifadelerin kullanımında sanki Python’a heveslenmişler gibi. Mesela python’a benzer pratik döngü yapıları geliştirmişler. Kotlin’de şu XML dosyasında widget biçimlendirme işi gıcık geldi, Android studio bilgisayarımda çok kastırdı. Dart flutter gerçekten keyifliydi ama kodlarım dart dili yapıları, fonksiyonlar methodlar widgeti biçimlendiren ağaç yapısı vs. çok iç içe girince ilk başta pratik gibi geldi ama bir süre sonra iyice salataya döndü o da gıcık etti beni.

Hepsiyle ufak çaplı projeler yapmaya çalıştım. Dedim son olarak şu Kivy’e de bakayım. Başladım dökümantasyonu okumaya. İlk derlemeyi başarıyla yapıp apk’yı telefona attıktan sonra acayip merak saldım. İlk derleme harbiden sancılı ama huyunu suyunu öğrenince aşıyorsun bir şekilde :laughing: Bir de şu .kv dosyasında widget ağacı oluşturmak acayip pratik geldi. Dediğim gibi tek zorluk ilk derleme

Hiç profesyonel yorumlar yazmadığımın farkındayım. Keyfine takıldığım için en çok keyif verenini deneyip bulmaya çalıştım. :sweat_smile:

1 Beğeni

Konu biraz eski ama, mobilde kivy ile ne kadar verim alinabilir. Ne derece mobil uygulama veya oyun yapilabilir. Kotlin android’de ilerlemek istiyordum ama, android studionun surekli sorun cikartmasi beni bunaltti. Beni resmen mobilden uzaklastirdi.

Oyun programlama ile ilgili hiçbir deneyimim yok, ilgimi çeken bir alan değil. Kivy ile mobil oyun yapılabileceğini pek emin değilim ama sanmıyorum.

Kivy ile geliştirilen mobil projeler tatmin edici olur mu?

Proje çok büyük ve kapsamlı birşey değilse olabilir. Şu anda birkaç aydır boş zamanlarımda hobi olarak uğraştığım bir mobil projem var. Bir de birkaç haftadır yeni başladığım bir mobil projem var. Onları geliştirmeye devam ediyorum. İlki webden veri çekerek kendi local veri tabanı ile senkronize eden bir proje. İkincisi firebase realtime veri tabanı üzerinden desktop bir uygulama ile paslaşan bir proje.

Kivy’de uygulama geliştirme süreci nasıl?

Hızlı ilerleniyor. Taki APK derleme işine geçene kadar. Proje büyüdükçe modül bağımlılıkları arttığından APK yapma işi daha problemli hale geliyor. İnat edip bir şekilde çözülebiliyor fakat aynı inat diğer diller ve frameworkların problemlerini de çözebilir tabiki :slightly_smiling_face: Benim laptop 11 yıllık, VS Code üzerinde Kivy uygulama geliştirmeme olanak tanıyor fakat yukarıda bahsettiğim gibi Android Stüdyo kasıyor, emülatör bayağı kasıyor. Eski telefonumu test cihazı olarak kullanıyorum. Kivy nin cazip taraflarından biri uygulamanı çalıştırdığında hemen işletim sistemi üzerinde açılan bir pencere üzerinde simüle edebilmesi. Çok kolayca bilgisayarda çalışıyor. APK kısmı bunaltıcı.

Uygulama telefonda nasıl bir his veriyor?

Şu anda telefonumda hem Flutter/Dart ile hem de Python/Kivy ile geliştirdiğim uygulamalar var. Flutter ile yaptığım bir uygulama kapsam olarak yukarıda ilk bahsettiğim kivy projeme çok yakın, webden veri çekip düzenleyerek kullanıcıya gösteriyor. İki uygulama arasında şöyle farklar var.

  • Flutter uygulamam 35Mb, Kivy yaklaşık 100Mb. Yani Kivy uygulamaları bayağı alan kaplıyor.
  • Flutter uygulamam daha hızlı açılıyor, Kivy daha geç açılıyor. Hız farkı var.
  • Flutter uygulamamdaki ekran görüntüleri, Widget’lar daha şık, Kivy’de aynı görüntüyü elde etmek zor, yeteneğinize bağlı. KivyMD gibi görsel olarak geliştirilmiş Kivy kütüphaneleri var fakat onu denedim, uygulanma boyutu daha büyük oldu ve daha ağırlaştı. Ben Kivy kullanıp kendim görsel kısımlarını html/CSS kasar gibi güzelleştirmeye çalışıyorum. Zaman alıcı fakat zaman problemim yok. Mobil Dünya için Kivy’i, masaüstü UI geliştirme araçlarından Tkinter gibi düşünebilirsin. Yani daha basit ama bazı noktalarda yetersiz kalabilir. Benzetme ne kadar doğru bilmiyorum ama böyle sayılabilir.
  • Uygulama ekranları arasındaki geçişler, butonlara basma hissi vs. flutter çok daha akıcı. Tabi Kotlin de denedim o da öyle.
  • Widget koleksiyonu anlamında flutter çok daha geniş, Google material design prensipleri ile tam uyumlu. Google Jatpack denilen yapılar var Kotlin kursunda görmüştüm. Bunlar büyük avantajlar. Lakin öğrenmek için büyük zaman harcamak lazım.

Kivy, flutter, Kotlin’den Başka Alternatif Var mı?

Var tabi. Qt ile de mobil uygulama geliştirilebiliyor. C++, Java ile de yapılabilir.

Hangisi Seçmeliyim?
Yapmak istediğin şeyin hangilerinde yapabileceğini araştır. Birkaç tanesi ile hello world uygulaması, yada basit bir form veri kaydetme uygulaması yap. Karşılaştırma imkanı bulursun. ChatGPT kod kısmı yanında dokümantasyon taramada da sana kolaylık sağlayacaktır.

1 Beğeni

Burada birkaç yıl önce kivy ile program geliştiren ve sürekli kronik hatalarını düzeltmek için forumda konular açan, bana sorular soran bir abimize Java/Kotlin ile programlamaya geç tavsiyesinde bulundum. Kendisi Java ile android programlamaya geçti ve program geliştirme hızı üstel olarak arttı. Android Studio iyidir, hayat enerjinizi geri getirir. Her türlü alanda kütüphane ve destek bulabilirsin, kivy gibi yok recipe hazırla yok şu modüllerden feragat et olayı yok. İnsanın recipe hazırlaması bile donanım gerektiriyor. Hiç gerek yok böyle şeylere acemi biriyseniz güzelce Android Studio indirip yolunuza bakın. Yok ben C/C++ kütüphanelerinin derinliklerinde yüzmek istiyorum, benden sorulur diyorsanız kolay gelsin. Kivy ile C/C++ kütüphaneleri bağlamak ve Android SDK’nın derinlerine dalmak eğlenceli gelecektir size.

Konu sahibi de kusura bakmasın, sürekli konusuna yazıp sanki kivy için gelenleri yıldırmaya çalışıyormuşum gibi geliyor olabilir ama tecrübelerimi yazıyorum, insanlar vaktini buna harcayacağına sağlam bir şekilde java/kotlin ile android programlamaya ayırsa çok çok daha faydalı olur. kivy eğlenceli ama derlemeye gelene kadar veya ciddi bir iş yapana kadar…