Skip to content
This repository has been archived by the owner on Mar 1, 2023. It is now read-only.

Latest commit

 

History

History

No 29 - What is BeeWare

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

BeeWare ile Linux Platformunda Desktop Uygulaması Geliştirmek ve Android Sürümünü Oluşturmak

Python ile ilgili bir şeyler ararken BeeWare isimli bir çalışmaya rastladım. Her yerde python ile native uygulama geliştirmek gibi bir felsefesi vardı. (Eee zaten python her platformda yüklenip kullanılmıyor mu? Yok, öyle değil aslında) BeeWare ürünü macOS, Linux, Windows platformunda native uygulamalar geliştirmek haricinde iOS ve Android için de destek sunan bir araçlar ve kütüphaneler topluluğu esas itibariyle. Söz gelimi iOS ve macOS platformundaki Objective C kütüphaneleri ile Python arasında köprü görevi gören Rubicon ObjC isimli bir araç sunuyor. Java kütüphaneleri ile bir iletişim mi söz konusu. O zaman Rubicon Java var. Diğer yandan cross-platform için Toga isimli bir widget kütüphanesi kullanıyor. Ayrıca python projelerini tek başına çalışabilir uygulamalar haline getirmek için (standalone native application) Briefcase isimli bir aracı var. Şöyle düşünebiliriz; Android için Gradle çıktısı, iOS için XCode proje çıktısı, Linux için AppImage, Windows için MSI Installer ve macOS İçin doğrudan çalışabilir uygulama çıktıları üretebiliyoruz. Bana bir Xamarin kokusu verdi gibi ama du bakalım. (Bu arada BeeWare'in Logo'su acayip tatlı) İddialı bir platform. Benim amacım Heimdal (Linux 20.04) üzerinde bir masaüstü uygulaması geliştirmek.

Ön Hazırlıklar

# Sistemde Python yüklü olsa bile ekstra bazı kütüphaneler de gerekiyor
# Lakin bu paketleri hangi amaçla yüklüyoruz, araştırmam lazım. Mazallah güvenlik açığı filan da olabilir. Aman dikkat!
sudo apt-get install libgirepository1.0-dev libcairo2-dev libpango1.0-dev libwebkit2gtk-4.0.37 gir1.2-webkit2-4.0

# Şimdi Python paketinin dağıtımında devreye girecek Briefcase aracını yükleyelim
# Bu arada 20.04 üstünde cookiecutter versiyonunu beğenmedi Heimdall. O nedenle cookiecuttor'ı da pip üstünden install ettim
python3 -m pip install briefcase

# Adettendir kurulan versiyonu bir kontrol etmek iyi olabilir
briefcase --version

# Şimdi yeni projenin açılışını yapabiliriz
briefcase new

# Sorulan sorulara verdiğim cevaplar doğrultusunda cardgame isimli bir proje oluştu. 
# Carg Game isimli projenin GUI framework olarak Toga'yı seçtim. 
# Buna göre projenin Linux, macOS, Windows dağıtımlarındaki gereksinimleri ile birlikte
# diğer sorduğu sorulara() verdiğim cevaplar pyproject.toml (toml = Tom's Obvious Minimal Language) içerisine yazıldı.
# Bu dosyayı incelemekte yarar var.

Kurulum aşamasından örnek ekran görüntüsü

Screenshot_01.png

Çalışma Zamanı

linux, macOS, Windows... Hepsinde aşağıdaki terminal komutları ile uygulamayı çalıştırabiliriz.

cd cardgame
briefcase dev

İlk çalışma sırasında üzerinde olduğumuz platforma göre gerekli bağımlılıklar indirilir. Toga paketleri gibi.

Screenshot_02.png

Örnek bir çalışma zamanı görüntüsü

Screenshot_03.png

Dağıtım (Deployment)

Uygulama şu ana kadar development modda çalıştı. Ancak bunu paket haline getirip ilgili platformlara dağıtmak için bir dizi işlemden geçirmek gerekiyor. Normalde Linux için bir dağıtım paketi oluşturmayı düşünüyordum ancak bu uygulamayı Android'e paketleyebilir miyim diye de merak ettim. İşte uygulamanın android sürümüne dönüştürülmesi için yapılanlar.

# Uygulama klasöründeyken create ile android app oluşturulur (dakikalarca sürebiliyor)
briefcase create android
# ve build komutu ile de apk dosyası üretilir. Card Game/app/build/outputs/apk/debug/app-debug.apk altında oluşur. (Gerekli SDK, NDK paketlerini indirdiği için ilk seferinde dakikalarca sürebiliyor)
briefcase build android

# Kontrol amaçlı olarak build edilen sürümü aşağıdaki gibi çalıştırılabilir
# Burada sanal bir emülator'den yararlanılabileceği gibi gerçek bir Android cihazda kullanılabilir
# Ben Create a new Android Emulator seçeneğini kullandım.
briefcase run android

Geliştirdiğimiz uygulamanın Android için çalışan sürümünden bir görüntü

Screenshot_04.png

Bu örnek için andorid klasörü tüm bağımlılıkları ile birlikte 500 megabyte'tan fazla yer tuttu. APK dosyası ise 50 Mb'den biraz fazlaydı. Bana epeyce büyük geldi.

Bomba Soru

throw new ICantFindAnyQuestionException();

Ödevler

  • Uygulamadan girilen verileri SQLite veritabanına aktarmayı deneyin. Doğrudan bağlantı ile veya bir REST servis aracılığıyla olabilir.
  • macOS üzerinden çalışıyorsanız iOS sürümünü üretmeyi deneyebilirsiniz.