본문 바로가기
코딩/모바일앱

[kivy] 파이썬으로 안드로이드 스마트폰 앱(apk 파일) 만들기/buildozer, wsl

by 나홀로코더 2021. 12. 10.
반응형

목차

1. kivy와 buildozer 소개

2. wsl 소개

3. buildozer를 이용해서 kivy 앱을 apk 파일로 만들기


 

Python Software Foundation과 JetBrains가 협력하여 실시한 설문조사 결과에 따르면 파이썬은 주로 데이터 분석, 머신 러닝, 자동화 툴, 웹 개발 용도로도 쓰이는 언어이고, 모바일 앱 개발 분야에서 인기가 있는 편은 아니다.

 

그러나 웹 개발에서 가장 인기 있는 자바스크립트가 있음에도 flask나 django 등 웹 개발을 위한 파이썬 라이브러리가 있는 것처럼 모바일 앱 개발을 위한 파이썬 라이브러리도 존재한다.

 

모바일 앱 개발을 위한 kivy 라이브러리와, kivy 앱(파이썬 파일)을 apk 파일로 만들어 주는 buildozer를 소개한다.

 

이 글에서 소개하는 주된 내용은 2, 3번에 있으니 1번에 관심이 없거나 이미 알고 있다면 건너 뛰어도 무방하겠다.

 

참고로 이 글에서는 윈도우 환경을 기준으로 설명한다.

 

1. kivy와 buildozer 소개

 

Kivy

 

위키백과에서 kivy에 대한 소개를 읽어보자.

 

Kivy는 자연스러운 사용자 인터페이스로 모바일 앱 및 기타 멀티 터치 애플리케이션 소프트웨어를 개발하기위한 무료 오픈 소스 Python 프레임 워크입니다. MIT 라이선스 조건에 따라 배포되며 Android, iOS, Linux, macOS 및 Windows에서 실행할 수 있습니다.

 

말하자면 kivy는 파이썬의 대표적인 GUI 라이브러리인 tkinter처럼 GUI 앱을 만들기 위한 라이브러리인데, 멀티 터치가 되고, 안드로이드나 iOS에서도 돌아간다는 점에서 어찌 보면 더 활용 폭이 넓은 라이브러리라고 할 수 있다.

 

kivy 홈페이지에서 소개하는 예시들을 보면 kivy로 만들 수 있는 여러 GUI 요소들을 볼 수 있는데, 연습삼아 앱들을 만들어보니 스마트폰 화면 크기에 따라 알아서 비율 조절도 되고, 터치나 슬라이드도 되어 모바일 앱을 만드는 데에 손색이 없어 보인다.

(pip install 커맨드로 kivy를 설치한 뒤에 스크립트를 다운 받아 실행하면 카탈로그 형태로 볼수가 있다.)

 

kivy의 특징이라면, 화면을 디자인하기 위한 별도의 언어 체계를 가지고 있다는 것인데, .kv 파일로 화면의 레이아웃이나 GUI 요소들의 배치 등을 하고, 메인 파이썬 스크립트에서 .kv 파일을 불러오는 식으로 작동한다. 

 

.kv 파일을 따로 만들지 않고도 개발은 가능한데, HTML 문서와 CSS 파일을 따로 만드는 것과 비슷한 이유로 .kv 파일을 따로 만들게끔 해놓은 것 같다.

 

Buildozer

 

kivy는 들어봤어도 buildozer는 못 들어본 사람이 많을 것 같다.

 

한마디로 말하자면 buildozer는 kivy로 만든 앱을 apk 파일로 빌드하는 데 쓰는 라이브러리이다.

 

buildozer 홈페이지를 들어가 소개글을 읽어보면 kivy로 만든 앱만을 위한 라이브러리는 아닌 것처럼 읽히는데, kivy 개발자들이 만든 라이브러리이고 그 외의 용도로는 사용이 가능해 보이지 않는다.

 

buildozer의 큰 특징은 리눅스 환경에서 사용해야 한다는 것이다..

 

리눅스에 익숙하지 못한 필자로서 거부감이 느껴지는 대목이었으나, 위 홈페이지의 가이드만 잘 따라가면(복잡해 보이지만 사실 명령어 복붙의 연속이다) 그리 오래지 않아 kivy 앱을 apk 파일로 만들 수 있다.

 

 

반응형

 

2. wsl 소개

 

윈도우 사용자라면 리눅스 환경을 따로 만들어줘야 하는데, 이를 위해서 wsl을 설치하면 된다.

 

wsl은 Windows Subsystem for Linux의 약자로, 윈도우 PC에서 리눅스 환경(Ubuntu)을 사용할 수 있도록 마이크로소프트에서 제공하는 시스템이다.

 

설치 방법은 아래 링크에서 확인할 수 있다.

 

https://docs.microsoft.com/ko-kr/windows/wsl/setup/environment

 

매우 간단한데, 명령프롬프트를 열고 아래 명령어를 입력하면 끝이다.

 

wsl --install

 

다만 명령프롬프트를 관리자 권한으로 열어야 하는데, 그러려면 아래와 같이 작업표시줄에 있는 돋보기를 누른 뒤에 cmd를 검색하고 관리자 권한으로 실행을 선택하면 된다.

 

명령프롬프트 관리자 권한으로 실행하기

 

그런 다음에 Ubuntu를 실행하고 사용자 계정과 암호를 설정한 뒤에, 아래 명령어를 실행해 패키지를 업데이트 해준다.

 

sudo apt update && sudo apt upgrade

 

반응형

 

 

3. buildozer를 이용해서 kivy 앱을 apk 파일로 만들기

 

이제 apk 파일을 만들어볼 준비가 다 됐다.

 

일단 apk 파일로 변환할 kivy 앱이 필요한데, 필자는 kivy 홈페이지의 예시를 사용했다.(링크)

 

kivy 앱 파일이 준비되었다면 이제 apk파일로 변환하기 위한 작업을 시작한다.

 

※ 분명 똑같이 따라 했는데도 잘 안된다면, 일단 PC를 껐다 켜보자. 그래도 안 되면 구글링밖에 방법이 없다.

 

buildozer와 관련 패키지 설치

 

일단 buildozer부터 깔아야 하는데, pip도 안 깔려 있기 때문에 아래 명령어로 pip부터 설치한다.

 

sudo apt install python3-pip

 

그런 다음 buildozer와 그밖에 필요한 패키지들을 설치한다.

 

참고로 아래 명령어들은 buildozer 홈페이지에서 복사해다 붙여넣은 것들이고, 다만 wsl 환경에서는 openjdk 13이 설치되지 않아 11로 변경하였다.(search openjdk 명령어를 입력하면 설치 가능한 버전이 검색된다.)

 

pip3 install --user --upgrade buildozer
sudo apt install -y git zip unzip openjdk-11-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinf
o5 cmake libffi-dev libssl-dev
pip3 install --user --upgrade Cython==0.29.19 virtualenv
export PATH=$PATH:~/.local/bin/

 

가상환경 만들기 => 생략해도 무방!(생략하는 것을 추천)

 

buildozer의 설명을 보면 그 다음으로 아래와 같이 가상환경을 만들어주는 명령어들을 입력하라고 되어 있다.

 

sudo apt install -y python3.7-venv
mkdir /mnt/c/buildozer
cd /mnt/c/buildozer
python3.7 -m venv venv-buildozer
source venv-buildozer/bin/activate

 

그러나 필자가 시도해본 결과 위 과정은 생략하는 게 나은 것 같다. 

 

위 명령어들을 실행하는 과정에서 에러가 발생했는데, 파이썬 버전이 맞지 않아서 그런 것 같아 python3 --version으로 현재 파이썬 버전을 체크한 다음 위 명령어에서 파이썬 버전을 3.8로 바꿔서 해보니 이번엔 가상환경 만드는 데에서 다시 에러가 나서, python 3.7을 깔고 다시 하는 등 시행착오를 많이 거치게 되었다.

 

그런데 결국은 다음 단계에서 저장공간에 대한 권한 문제로 가상환경을 사용하지 못했다.(수많은 Operation not permitted 메시지를 마주치게 된다.)

 

구글링해본 결과 Ubuntu에서는 기본적으로 윈도우의 파일시스템(NTFS)을 지원하지 않아 읽기 전용으로 열리기 때문(구글링 결과를 그냥 따라 읊는 것입니다..)이고, 따로 파티션을 마운트를 해줘야 한다는 것 같아서 아래 명령어도 시도해봤지만, 소용이 없었다.

※ 위 명령어를 따라 입력하면, c드라이브에 buildozer 폴더를 생성하고 그 안에서 빌드 작업이 이루어지기 때문에 권한 문제가 생긴다.

 

sudo mount -t drvfs C: /mnt/c -o metadata

 

해결방법이야 찾으면 나오겠지만, 굳이 가상환경을 만들지 않아도 C드라이브가 아닌 리눅스 환경의 홈 디렉토리에서 작업을 하면 권한이 문제되지 않으니 그냥 그렇게 할것을 추천한다.

 

앱 빌드하기

 

가상환경 만들기는 포기하고 바로 앱을 빌드해보자.

 

이 작업은 Ubuntu의 홈 디렉토리에서 진행해야 하고, 해당 디렉토리에 본인이 변환하고자 하는 파일이 있어야 한다.

 

만일 위의 가상환경 만들기를 시도하던 중이었다면 C드라이브의 buildozer 폴더가 작업폴더인 상태일 테니 아래 명령어로 홈 디렉토리까지 이동한다.

 

cd ..

 

홈 디렉토리에서 pwd를 입력해보면 /home/codealone/과 같이 홈디렉토리 경로가 나타날 것이다.

 

먼저 아래와 같이 파이썬 파일을 위 디렉토리로 옮기자.

 

mv /mnt/c/buildozer/main.py /home/codealone/

 

mv 다음에 파일의 현재 경로를 입력하고(/mnt/c/가 윈도우의 C://과 같다), 그다음에 홈 디렉토리 경로를 입력하면 된다.

 

참고로, 파이썬 파일의 이름은 main.py로 해야한다.

 

파이썬 파일을 옮겼다면 아래 명령어를 이용해 buildozer.spec 파일을 생성해주자.

 

buildozer init

 

buildozer.spec 파일은 내가 만들 앱의 이름을 포함한 각종 정보를 담은 파일로, 이 파일의 내용을 기반으로 앱이 빌드된다.

 

이것을 수정하고 싶다면 위에서 파이썬 파일을 옮긴 것처럼 .spec 파일을 C드라이브로 옮긴 다음에 수정을 해도 되겠고, Ubuntu 내에서 편집을 해도 되겠으나, 여기에서는 그 과정을 생략하겠다.(편집을 안 하고도 빌드가 가능하고, 다만 myapp이라는 이름으로 앱이 만들어진다.)

 

그런 다음 아래 명령어를 입력해주면, 앱을 빌드하기 시작한다.

 

buildozer -v android debug


수많은 메시지들이 나오고, 꽤 오랜 시간이 지나고 나면 작업이 완료되었다는 메시지와 함께 작업이 끝난다.

 

빌드된 apk 파일은 작업폴더 내에 새로 생긴 bin 폴더 안에 들어 있다. 이것을 다시 C드라이브로 내보내자.

 

 

mv /home/codealone/bin/myapp-0.1-armeabi-v7a-debug.apk /mnt/c/(원하는 경로)

 

apk파일의 이름은 cd bin을 입력(bin 폴더로 이동)하고 ls를 입력(폴더 내 파일이나 폴더 목록 출력)하면 확인할 수 있다.

 

이제 위 apk 파일을 본인의 스마트폰으로 옮겨 주면 앱을 설치하고 실행할 수 있다.

 

apk 파일
설치된 앱

작동하는 모습

 

반응형

댓글