파이썬[Python]: kivy, kivyMD 안드로이드 앱 생성(빌드) - 디버그

(2022년 1월 5일 현재) kivy를 통한 프로그램들은 kivy launcher를 사용하는 것(사용해보지는 않았습니다.)을 제외하면 Linux나 MacOS에서 apk 를 생성해야 합니다.
윈도우에 익숙하신분들은 이러한 진입장벽이 있기 때문에 쉽게 접근하기 어려울 것이라 생각합니다.

이에 (파이썬을 공부하시다가) 모바일(GUI 프로그래밍)을 시도해보고 싶으신 분들께 조금이나마 도움이 되었으면 하는 바램으로 이 글을 드립니다.



APK 생성(빌드) 방법

  1. 컴퓨터에 리눅스 설치 또는 애플 컴퓨터 구입

  2. Virtual Machine 을 통해 가상환경 설정(예:) Virtual Box)

  3. WSL(Windows Subsystem for Linux) 사용 - 윈도우를 마운트하여 사용할 수 있기 때문에 사용하기 편합니다.

  4. Google Colab 이나 Github Actions 사용

여기서 저는 Google Colab을 사용해보겠습니다.(간단한 방법으로 이 글을 보는 분들은 저와 같은 환경을 사용하실 수 있습니다.)

(파이썬 프로그램은 윈도우에서 작성 후 업로드 하시면 되고, 리눅스 명령은 복사와 붙여넣기만 하시면 됩니다. buildozer.spec 은 윈도우에서 작성하셔도 되고, Colab에서 작성하셔도 됩니다. 디버깅 할 경우는 Colab에서 변경하시는것이 훨씬 편합니다.)



단계 1. 구글 Colab 과 친분쌓기

  1. 구글에 가입(무료)(# 아직 스폰제의을 받지는 않았습니다. ^^)

  2. https://colab.research.google.com/?hl=ko 로그인을 합니다.

  3. 목차에 보시면 데이터 과학과 머신러닝에 관련된 내용이 나옵니다만, 저희는 파이썬(kivy 모듈)으로 안드로이드 apk를 생성할 것입니다.

  4. 마음껏 Colab 과 친분을 쌓으시길 바라겠습니다. 저는 아직 충분한 친분을 쌓지 못했습니다.(익숙해지시면 사용하기 편합니다. 참고: 파이썬 3.7을 사용합니다.)






단계 2. 가장 간단한 예제로 apk 생성

  1. Colab 과 친분을 쌓으셨다면 파이썬 프로그래밍과 리눅스명령을 같이 사용하실 수 있다는 것을 아실것입니다.

    파이썬 프로그래밍: Colab 노트북
    리눅스명령: ! 를 앞에 붙이고 사용

가장 간단한 예제는 제가 준비한것으로 시험해보십시오.(버튼만 있는 예제입니다.)

자동 설정과 수동 설정 으로 kivy, kivymd 모두 시험해 보실 수 있습니다.
(자동설정은 expect 와 buildozer.spec 의 android license=True 를 사용하였습니다.)

중간에 build 에러가 나는 부분이 3부분있는데 잘 읽어 보시면 첫 빌드는 실패한다고 쓰여져 있고, compiling 부분에서 파이썬 과거버전(version 1 인듯) 문장을 컴파일 할 경우 문제시되는 부분이 있지만(저희가 파이썬 3을 쓴다는 것을 인지하신다면?), 전체적인 부분에서 문제는 발생하지 않습니다. 이 부분에 대해서 자세히 아시는 분이 있으면 저에게 알려주시면 감사하겠습니다.


  2. 아래의 각 단계를 코드셀(code cell)에 복사&붙여넣기 하시고 실행하시면 됩니다.(복사&붙여넣기 5번만 하시면 됩니다. 처음 3단계는 중요파일 3가지를 Colab으로 복사해오는 것이고, 4단계는 스크립트 실행허용, 5단계는 스크립트 실행입니다.)

  3. apk 생성이 완료(20분 정도 걸립니다.)되었다는 문구가 보이면 Colab 왼쪽 디렉토리에서 apk 를 다운로드하시면 됩니다.(/bin 디렉토리에 생성되어 있을 것입니다.)

  4. 안드로이드 스마트폰이나 에뮬레이터에 설치하고 작동시키시면 됩니다.


  안드로이드 SDK 라이센스 자동 설정

  kivy
  1_1. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivy_buildozer_colab_skip_licence/main.py
  1_2. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivy_buildozer_colab_skip_licence/buildozer.spec
  1_3. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivy_buildozer_colab_skip_licence/making_apk.sh
  1_4. !chmod +x making_apk.sh
  1_5. !./making_apk.sh

  kivyMD
  1_1. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab_skip_licence/main.py
  1_2. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab_skip_licence/buildozer.spec
  1_3. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab_skip_licence/making_apk.sh
  1_4. !chmod +x making_apk.sh
  1_5. !./making_apk.sh


  안드로이드 SDK 라이센스 수동 설정(화면을 보시다가 'y'를 누르셔야 합니다.)

  kivy
  1_1. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivy_buildozer_colab/main.py
  1_2. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivy_buildozer_colab/buildozer.spec
  1_3. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivy_buildozer_colab/making_apk.sh
  1_4. !chmod +x making_apk.sh
  1_5. !./making_apk.sh

  kivyMD
  1_1. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab/main.py
  1_2. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab/buildozer.spec
  1_3. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab/making_apk.sh
  1_4. !chmod +x making_apk.sh
  1_5. !./making_apk.sh






단계 3. 확장
(본인의 프로그램을 작성합니다. - 파일은 3종류가 있어야 합니다.)

  본인이 작성한 프로그램(main.py): Colab 에서는 실행을 할 수 없으니 윈도우에서 본인의 프로그램을 만드세요. 그리고 Colab 에 업로드 합니다.
  buildozer.spec: apk 를 생성할 경우, Buildozer 란 프로그램을 사용합니다. 환경설정을 위해 필요합니다. 간단 예제에서 사용하신 것처럼 온라인상에서 가져오셔도 되고, 아래의 파일을 다운받으신 다음 변경 후 Colab 에 업로드 하셔도 됩니다.(온라인상에서 가져오시는 것은 제가 조금 수정(축약)한 것입니다.)
  making_apk.sh: 프로그램을 빌드하기 위한 제반사항들을 설치하여줍니다.

  1. 본인이 작성한 프로그램과 파일들(jpg, atlas, wav 등...)을 Colab 에 업로드 합니다.

  2. 본인이 작성한 프로그램에 맞게 buildozer.spec 을 변경하여 줍니다.

    원본파일다운: buildozer.spec

  3. making_apk.sh 를 사용하여 apk 를 생성하시면 됩니다.(복사&붙여넣기)

    1. !wget https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab_skip_licence/making_apk.sh
    2. !chmod +x making_apk.sh
    3. !./making_apk.sh

    or

    1. !bash -c "$(wget -O - https://raw.githubusercontent.com/psychedelphia/Kivy_Android-App/main/kivymd_buildozer_colab_skip_licence/making_apk.sh)"





이미지, 사운드등 새로운 파일 사용시
buildozer.spec 에서 다음을 바꾸어 줍니다.(확장자만 첨가해 주시면 됩니다.)

# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas,wav

또는 주석처리 해주시면 신경쓰지 않으셔도 됩니다.

# (list) Source files to include (let empty to include all the files)
# source.include_exts = py,png,jpg,kv,atlas,wav

새로운 애플리케이션 사용시
buildozer.spec 에서 다음을 바꾸어 줍니다.

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy,pillow
requirements = python3,kivy

인터넷 사용시
buildozer.spec 에서 다음을 바꾸어 줍니다.

주석 해제하시면 됩니다.
# (list) Permissions
android.permissions = INTERNET


단계 4. 디버깅(조금 복잡합니다.)

  안드로이드에서 제공하는 adb를 사용하여 디버깅합니다.
  참고 사이트: Android 디버그 브리지(adb)
  다운로드 사이트: Android SDK 플랫폼 도구 다운로드
  Logcat 사용법: Logcat 명령줄 도구

  Android 전용 라이브러리를 제외하고는 Windows 에서 실행하실 수 있습니다. Windows에서 디버깅하시고 앱을 빌드하시면 됩니다. (몇몇 중요한 문제들은 apk 다운로드받고 디버깅해야됩니다. ^^;)
  Windows 에서 사용가능한 것부터 연습하시고(생각보다 많은것을 하실 수 있습니다.), 다음에 Android 전용(Windows에서 확인 불가) 라이브러리들을 이용하는 것을 연습하시면 될 듯 싶습니다.

  WSL 이나 Virtual Box 는USB 연결 혹은 Wifi 무선 디버깅(동일 네트워크상에서 가능)을 할 수 있습니다.

  파이썬 백엔드(수치연산 같은... ex)numpy) 라이브러리들은 내부에서 사용하기 때문에 사용하는데 불편함은 없습니다. 다만 프론트엔드(그래프 표현 같은... ex)matplotlib, panda 3D) 라이브러리들은 kivy와 연동을 해야합니다. 찾아보시면 몇몇분들이 구현을 해놓은것이 있으니 확인해 보시기 바랍니다.

* 사용자 인터페이스는 디자인하기 나름입니다.
* 이론 + 실전 /// 프레임워크 사용숙지 + 탈종속(從屬)화(프레임워크 분석 또는 저급(low level) 언어 연구) 노력: 멀리가는 방법입니다.

댓글

이 블로그의 인기 게시물

파이썬[Python]: 내장함수 - from_bytes 메서드

파이썬[Python]: 내장함수 - __len__ 메서드

파이썬[Python]: kivy - 한글 사용

파이썬[Python]: 내장함수 - bit_length 메서드

C 언어: sin 함수, cos 함수, tan 함수