Kivy demo build into binary - android app

Table of contents

kivy 개발 환경 구축

WSL2 Ubuntu 22.04 를 사용했습니다. (linux 환경)
가장 우선적으로 pip를 최신 버전으로 업그레이드합니다.
python -m pip install --upgrade pip
Bash
복사

1. installing kivy

kivy를 설치하기 전, setuptools 모듈과 virtualenv 모듈을 먼저 설치합니다.
virtualenv는 python 개발을 위한 가상 환경을 구축해주는 역할을 합니다. 설치하는 파이썬 모듈과 source들을 하나의 디렉토리로 관리할 수 있도록 도와 주는 모듈로, python과 모듈 버전 관리를 용이하게 도와줍니다.
setuptoos는 python 생태계에서 패키지 배포 및 설치를 관리를 도와주는 모듈입니다.
python -m pip install virtualenv setuptools
Bash
복사
이제 가상환경을 만들어서, python 프로젝트 환경을 마련해줍니다. 이렇게 따로 가상환경을 만드는 이유는 다른 python 프로젝트에서 사용하는 모듈과 분리되는 환경을 만들어 줌으로써 개발 환경이 꼬이지 않도록 하기 위함입니다.
python -m virtualenv kivy_project_first cd kivy_project_first source bin/activate
Bash
복사
가상 환경을 위한 디렉토리를 만든 뒤 activate script를 실행함으로써 가상 환경에 진입합니다. 가상 환경을 나가고 싶다면 deactivate 명령어를 통해 벗어날 수 있습니다.
이제 kivy를 위한 환경이 마련되었으니 kivy 모듈과 demo를 돌려보기 위한 kivy_examples를 설치합니다.
기존 python 프로젝트와 앞으로 사용할 python 프로젝트와의 충돌을 피하기 위해 위 명령어들을 수행하여 가상 환경에 진입한 상태로 설치해줍니다.
pip install "kivy[base]" kivy_examples
Bash
복사
kivy 모듈은 kivy_project_first/lib/…/site-packages 경로에 설치되며, kivy_examples는 kivy_project_first/share 디렉토리에 설치됩니다.

2. execute demo (kivy_examples)

이제 설치가 완료되었으니 kivy demo를 돌려보도록 합니다.
python share/kivy_examples/demo/showcase/main.py
Bash
복사
아래와 같이 여러가지 UI들에 대한 demo를 확인할 수 있습니다.
Kivy demo: horizontal pannel
Kivy demo: menu
Error 발생 시…

Android build

이제 안드로이드 앱으로 빌드해볼 차례입니다. build를 하는 방법 중 가장 쉬운 방법은 buildozer 툴을 사용하는 것입니다. 귀찮은 세팅들을 해결해줍니다. 삽질을 덜 할 수 있게 해주는 고마운 툴이죠…
build를 하기 전에 코드가 있어야겠죠. app 디렉토리를 만들어서 demo 코드들을 복사 해옵니다.
# in kivy_project_first mkdir app_android_sample cp -r share/kivy_examples/demo/showcase/* app_android_sample/
Bash
복사
설치 후에 buildozer를 통해 android 빌드를 위한 세팅을 해줍니다.
pip install buildozer cd app_android_sample buildozer init
Bash
복사
기본적인 세팅이 되었으면 빌드를 수행해봅니다. 아마 에러가 발생할 것입니다. 아직 필요한 모듈, 패키지가 덜 설치되어서 그런 것이니 에러 메시지를 확인해 가면서 하나씩 설치하다 보면 빌드를 수행할 수 있습니다.
cd app_android_sample buildozer android debug # Error...
Bash
복사
우선, buildozer github의 installation에서 요구하는 package들을 설치합니다.
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 automake
Bash
복사
저 같은 경우, cython, javac, unzip, sdkmanager가 없다는 에러가 있었고 다음 명령어들로 설치할 수 있었습니다.
# cython pip install cython # javac, unzip sudo apt install openjdk-17-jdk unzip
Bash
복사
sdkmanager의 경우, 위 package들을 설치 및 ~/.buildozer/android/platform/android-sdk를 제거하고, buildozer로 다시 build를 시도함으로써 해결할 수 있습니다.
rm -rf ~/.buildozer/android/platform/android-sdk cd app_android_sample buildozer android debug
Bash
복사
아마 이렇게만 하면, build 완료 후에 app_android_sample/bin에 .apk 파일이 생성될텐데요. 안드로이드 스마트폰에 다운로드한 뒤에 apk를 설치하면 실행이 안 됩니다.
검색을 해본 결과 buildozer.spec 파일을 열어서 requirements라는 속성에 내용을 추가해 줘서 동작을 시킬 수 있었습니다. (정적 import의 경우 잘 잡아 주는 것으로 보이며, __imoprt__(..), importlib(..) 등으로 동적 import하는 경우 찾지 못하는 것으로 보입니다.)
pip install "kivy[base]"를 수행하면, 이미 설치를 했기 때문에 다음과 같은 로그를 볼 수 있습니다. 로그에서 보여주는 모듈들을 모두 requirements 속성에 추가해주시면 됩니다.
Requirement already satisfied: kivy[base] in ./lib/python3.12/site-packages (2.3.0) Requirement already satisfied: Kivy-Garden>=0.1.4 in ./lib/python3.12/site-packages (from kivy[base]) (0.1.5) Requirement already satisfied: docutils in ./lib/python3.12/site-packages (from kivy[base]) (0.21.2) Requirement already satisfied: pygments in ./lib/python3.12/site-packages (from kivy[base]) (2.18.0) Requirement already satisfied: pillow<11,>=9.5.0 in ./lib/python3.12/site-packages (from kivy[base]) (10.4.0) Requirement already satisfied: requests in ./lib/python3.12/site-packages (from kivy[base]) (2.32.3) Requirement already satisfied: charset-normalizer<4,>=2 in ./lib/python3.12/site-packages (from requests->kivy[base]) (3.4.0) Requirement already satisfied: idna<4,>=2.5 in ./lib/python3.12/site-packages (from requests->kivy[base]) (3.10) Requirement already satisfied: urllib3<3,>=1.21.1 in ./lib/python3.12/site-packages (from requests->kivy[base]) (2.2.3) Requirement already satisfied: certifi>=2017.4.17 in ./lib/python3.12/site-packages (from requests->kivy[base]) (2024.8.30)
Bash
복사
# in app_android_sample/ requirements=python3,kivy,Kivy-Garden,docutils,pygments,pillow,requests,charset-normalizer,idna,urllib3,certifi
Bash
복사
이제 buildozer android debug를 통해 빌드를 수행한 뒤, app_android_sample/bin/…..apk 파일을 스마트폰에 옮긴 뒤 설치하여 앱을 실행하시면 정상 동작하는 것을 확인하실 수 있습니다!