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.
-
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: Terminaledeactivate
yazarak aktif edilmiş ortamı tekrardan pasif hale getirebilirsiniz.
Artık terminali kapatabiliriz. -
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 ). 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()
-
.
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çinCtrl+Shift+P
tuş kombinasyonu ile ya daHelp/Show All Commands
yolu ile VS Code’da komut penceresini açın. Arama kısmınaPython: 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ündeCtrl+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 hemensource ~/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. -
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
-
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 . 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ızdapip3 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.)