Python kivy paketleme işlemi

kivy de yaptıgım programı android için paketlemek istiyorum ama araştırdım ve yapamadım anlatıcak birisi varsa çok iyi olur. :slight_smile:

Forumda bu işten iyi anlayanlar var. Ben sadece Buildozer kullanmanız gerektiğini söyleyebilirim.

1 Beğeni

Linux/Ubuntu ve Python 2.7 sürümü için aşağıdaki adımları takip etmenizi öneririm. (Denenmiştir.) Biraz uzun ve karışık gelebilir, ama adım adım uygularsanız umuyorum bir sorun çıkmayacaktır.

  1. İlk olarak Java’nın aşağıda belirtilen sürümünü yükleyelim.
sudo apt-get install openjdk-8-jre 
sudo apt-get install openjdk-8-jdk 
  1. Daha sonra aşağıdakileri yükleyelim:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y ccache git libncurses5:i386 libstdc++6:i386 zlib1g:i386 unzip ant autoconf libtool
sudo apt-get install -y python-pip build-essential git python python-dev ffmpeg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev zlib1g-dev
  1. Cython’u yükleyelim:
sudo pip install cython==0.25
  1. Virtualenv’i yükleyelim.
sudo apt-get install virtualenv
  1. Kivy’yi yükleyelim.
sudo apt-get install python-kivy
  1. Buildozer’i yükleyelim.
sudo pip install buildozer

Bu işlemlerden sonra buildozerin yeni sürümünün uyumsuzluğu yüzünden modülün bir dosyası üzerinde değişiklik yapalım. Bu değişikliği yapmasak da apk dosyası oluşur ancak oluşan dosya /bin klasörünün içine atılmaz ve derleme işlemi başarıyla sonuçlandığı halde bir IOError hatası yükseltilir.

~/.local/lib/python2.7/site-packages/buildozer/targets dizinine gidin. Ve bu dizinin içindeki android.py dosyasını açın. Dosyanın en üstüne aşağıdaki kodları yazın:

from distutils.version import LooseVersion

Sonra da 790. satıra gidin, bu satırda şöyle bir yorum olması lazım:

# XXX found how the apk name is really built from the title

Bu yazı ile aşağıdaki kod arasında kalan kodların yerine,

if is_gradle_build:

Aşağıda verilen kodları yazın.

__sdk_dir = self.android_sdk_dir
build_tools_versions = os.listdir(join(__sdk_dir, 'build-tools'))
build_tools_versions = sorted(build_tools_versions, key=LooseVersion)
build_tools_version = build_tools_versions[-1]
gradle_files = ["build.gradle", "gradle", "gradlew"]
is_gradle_build = any((exists(join(dist_dir, x)) for x in gradle_files)) and build_tools_version >= '25.0'

Dosyayı kaydedin ve çıkın.

Bu işlemden sonra artık derleme işleminin hazırlığına geçebilirsiniz.

Örneğin adı main.py olan bir uygulamanız olduğunu varsayalım.

Uç birimi açıp aşağıdaki komutu yazıyorsunuz:

buildozer init

Yukarıdaki işlemden sonra buildozer.spec isminde bir dosya oluşmuş olması lazım. Bu dosyayı açın ve içerisinde yorum satırlarıyla birlikte bulunan ön-tanımlı olarak ayarlanmış kodlar göreceksiniz. Bu dosya içerisinde bulunan aşağıdaki yorum satırlarını bulun ve kodları aşağıda gösterildiği gibi değiştirin.

# change the major version of python used by the app
osx.python_version = 2

# Kivy version to use
osx.kivy_version = 1.9.1

# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2

Şimdi uygulamanızı derlemeye geçebilirsiniz. Bunun için aşağıdaki komutu yazmanız gerekir.

buildozer android debug deploy run

Not: Eğer Java’nın sürümüyle alakalı bir sorun yaşarsanız, Java’ya ait sistemdeki bütün parçaları aşağıdaki komutları uç birime yazarak kaldırın ve tekrar yükleyin.

dpkg-query -W -f='${binary:Package}\n' | grep -E -e '^(ia32-)?(sun|oracle)-java' -e '^openjdk-' -e '^icedtea' -e '^(default|gcj)-j(re|dk)' -e '^gcj-(.*)-j(re|dk)' -e '^java-common' | xargs sudo apt-get -y remove
sudo apt-get -y autoremove
dpkg -l | grep ^rc | awk '{print($2)}' | xargs sudo apt-get -y purge
sudo bash -c 'ls -d /home/*/.java' | xargs sudo rm -rf
sudo rm -rf /usr/lib/jvm/*
for g in ControlPanel java java_vm javaws jcontrol jexec keytool mozilla-javaplugin.so orbd pack200 policytool rmid rmiregistry servertool tnameserv unpack200 appletviewer apt extcheck HtmlConverter idlj jar jarsigner javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc xulrunner-1.9-javaplugin.so; do sudo update-alternatives --remove-all $g; done
sudo updatedb
sudo locate -b '\pack200'
sudo apt-get install openjdk-8-jre 
sudo apt-get install openjdk-8-jdk 

Derleme esnasında bir sorun olursa, burada paylaşın, elimizden geldiğince yardım etmeye çalışırız.

4 Beğeni

ben windows kullanıyorum ve python 3.5 o nasıl olucak ?

Python3 için olan derleme işleminde henüz hata alıyorum. Aylar önce hem Python2 hem de Python3 için bir apk derleyebilmiştim. Ama kullandığım sürüm Python3.5 idi. Python3.6 için değişik bir yöntem gerekiyor sanırım.

Windows’da derleme işlemi nasıl yapılır şuanlık bir şey diyemiyorum. Ama ilerleyen zamanlarda Windows’da apk derlemeyi deneyeceğim, olumlu sonuç alırsam burada paylaşırım.

1 Beğeni

çok teşşekür ederim.:slight_smile: en kısa zaman da bekliyorum.

Kaynak: https://kivy.org/docs/guide/packaging-android-vm.html#introduction

Yukarıdaki alıntıya göre sadece Linux ortamında Android uygulamaları oluşturulabilir. Yalnız VirtualBox’u kullanarak Windows ve OS X işletim sistemlerinde de Android uygulamaları derlemek mümkün.

Android uygulamaları derlemenin iki çeşit yolu var:

  1. Kivy tarafından sağlanan Kivy / Buildozer yüklü bir Xubuntu sanal cihazını VirtualBox’a kurmak.
  2. İndirdiğiniz bir Linux dağıtmının iso dosyasını VirtualBox’a kurup, VirtualBox’da android uygulaması derlemek.

Size birinci yönteme göre neler yapılması gerekiyor, adım adım anlatmaya çalışayım. Linux’un Ubuntu dağıtımını VirtualBox’a kurduktan sonra yapmanız gereken işlemler, bu başlıkta daha önceden bahsettiğim işlemlerin aynısı olduğu için ikinci yöntemi anlatmayacağım.

Not: Bahsedilen 1. yöntem denenmiştir.

1. Yöntemin Adımları:

1.1. Önce VirtualBox’ı indirin ve kurun.
Link: https://download.virtualbox.org/virtualbox/5.2.12/VirtualBox-5.2.12-122591-Win.exe

1.2. Sonra aşağıdaki zip dosyasını indirin ve içindekileri dışarı çıkarın.
Link: http://txzone.net/files/torrents/kivy-buildozer-vm-2.0.zip

1.3. VirtualBox’ı çalıştırın.

1.4. Sol üst köşedeki Dosya menüsüne tıklayın ve Cihazı İçe Aktar seçeneğini seçin.

1.5. İçe aktarmak için seçeceğiniz dosya; daha önce indirdiğiniz, kivy’ye ait olan sanal cihaz (Buildozer VM) olmalı. İçe aktarma işleminin bitmesini bekleyin.

1.6. Şimdi VirtualBox’ın sol tarafında Kivy/Buildozer VM isminde bir sanal cihaz oluşması lazım. Ona tıklayın ve Başlat tuşuna basın. Biraz beklemeniz gerekecek.

1.7. Karşınıza bir login ekranı çıkması lazım. Bu login ekranının kullanıcı adı ve şifresi kivy’dir. Yalnız dikkat edin, Türkçe karakter kabul edilmez. i harfini yazmak için ı harfine basmak zorundasınız.

1.8. Şimdi karşınıza çıkan ekranın sol alt kısmında bulunan Buildozer kısayoluna tıklayın.

1.9. Buildozer kısayoluna tıkladıktan sonra ne yapmanız gerektiği hakkında bir html sayfası Mozilla ile açılacaktır. Bu sayfadaki How to Use VM yazısı altında bulunan 1, 2, 3, 4 şeklinde numaralandırılmış adımları takip etmeniz gerekecek. Yine de size izlemeniz gereken adımları tek tek anlatayım.

1.10. Bu sayfada sizden ilk olarak terminale buildozer init yazarak bir spec dosyası oluşturmanız istenir. Ama ondan önce ismi main.py olan kivy dosyanızı bu sanal ortama aktarın. Bu dosyanızı Github, Dropbox, Google Drive, e-postanız gibi yerlerde tutuyorsanız, bu dosyayı Mozilla’yı kullanarak indirin. Dosya /home/kivy/Downloads/ dizinine iner.

1.11. Ev dizininde bir tane klasör oluşturun ve indirdiğiniz main.py dosyasını bu dizine atın.

1.12. main.py dosyasının bulunduğu dizinde sağ tıklayın ve sonra da Open Terminal Here kısayoluna tıklayın.

1.13. Terminale buildozer init yazın. Sonra buildozer.spec dosyasının oluşmuş olması gerekir.

1.14. Şimdi bu buildozer.spec dosyasını açın ve aşağıdaki yorum satırlarına karşılık gelen yerlerdeki kodları aşağıda gösterildiği gibi değiştirin.

# (str) Package domain (needed for android/ios packaging)
package.domain = com.mydomain

# (list) Application requirements
# comma seperated e.g. requirements = sqlite3, kivy
requirements = hostpython2, kivy

# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2

# (str) Path to build artifact storage, absolute or relative to spec file
# build_dir = ./.buildozer
build_dir = /build/myapp

1.15. Dosyayı kaydederek çıkın.

1.16. Son olarak terminale aşağıdakileri yazın.

# html sayfasında aşağıdaki komut yerine
# "buildozer android_new debug" yazıyor.
# Ama yukarıdaki komutla derleme yaparken hata aldım. 
# Komutu aşağıdaki gibi yazdığımda ise hata almadım.
buildozer android debug

Son adımdan sonra apk dosyasının, main.py dosyasının bulunduğu dizindeki bin klasörünün içinde oluşması gerekir.

3 Beğeni

windows da denesem olurmu ?

Yukarıdaki adımları takip ederek deneyebilirsiniz.

1 Beğeni

1.5. İçe aktarmak için seçeceğiniz dosya; daha önce indirdiğiniz, kivy’ye ait olan sanal cihaz (Buildozer VM) olmalı. İçe aktarma işleminin bitmesini bekleyin.

burda tam olarak napılcagını anlamadım. Tam olarak ne aktaracagız

Yanılmıyorsam 1.5 .adımda, 1.2 . adımda indirdiginiz dosyayı ice aktaracaksınız.Eger 1.4 .adımı anladıysanız 1.5 .adım zor olmamalı.

Kolay gelsin :slight_smile:

1 Beğeni

Tamam gerek kalmadı buldum galiba, sende dene istiyorsan :blush:

1.10. Bu sayfada sizden ilk olarak terminale buildozer init yazarak bir spec dosyası oluşturmanız istenir. Ama ondan önce ismi main.py olan kivy dosyanızı bu sanal ortama aktarın. Bu dosyanızı Github, Dropbox, Google Drive, e-postanız gibi yerlerde tutuyorsanız, bu dosyayı Mozilla’yı kullanarak indirin. Dosya /home/kivy/Downloads/ dizinine iner.

cmd ye buildozer init yazdıgım da ;

‘buildozer’ is not recognized as an internal or external command,
operable program or batch file.

hatasını veriyor.

Siz bunu Windows ta mı deniyorsunuz?Apk yı ya terminal kullanarak,ya da windowsta sanal makine calıstırarak(yani windowsta linux calıstırmak gibi) yapabilirsiniz yalnız.

Cmd’ye mi yazdınız, Terminale mi?

1 Beğeni

cmd ye yazdım. terminaller cmd aynı şey degilmi ? degilse onu nerden açıçam???

windows da deniyorum. sanal makine olarak virtual box dan nasıl işletim sistemi kurarım ? ve gerekli mi

Terminalle cmd aynı sey degildir.cmd, Windows isletim sisteminin komut konsolu, terminal ise linux isletim sisteminin komut konsoludur.

Terminal linuxa ozgudur, windows uzerinden acamazsın.(sanal makineyi hesaba katmıyorum)

Belki bu size yardımcı olur.

http://kivy-tr.readthedocs.io/tr/latest/paketleme.html

Windows ve linux üzerinde kurulumu birlikte anlatılmıs.

1 Beğeni

1.12. maddeye bakın.

Bu işlemi sanal makinede yapacaksınız. 1.3. maddeden itibaren bütün işlemlerin sanal makinede yapılması lazım.

bakın isterseniz.