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.
- İ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
- 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
- Cython’u yükleyelim:
sudo pip install cython==0.25
- Virtualenv’i yükleyelim.
sudo apt-get install virtualenv
- Kivy’yi yükleyelim.
sudo apt-get install python-kivy
- 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.