6. Android에서 Python 사용하기¶
Android의 Python은 데스크톱 플랫폼의 Python과는 다릅니다. 데스크톱 플랫폼에서는 Python이 일반적으로 해당 컴퓨터의 모든 사용자가 사용할 수 있는 시스템 리소스로 설치됩니다. 사용자는 python 실행 파일을 실행하고 대화형 프롬프트에 명령을 입력하거나, Python 스크립트를 실행하여 Python과 상호 작용합니다.
Android에서는 시스템 리소스로 설치한다는 개념이 없습니다. 소프트웨어 배포의 유일한 단위는 “앱”입니다. 또한 python 실행 파일을 실행하거나, Python REPL과 상호 작용할 수 있는 콘솔도 없습니다.
결과적으로, Android에서 Python을 사용하는 유일한 방법은 임베디드 모드입니다. 즉, 네이티브 Android 애플리케이션을 작성하고, libpython 을 사용하여 Python 인터프리터를 임베드하며, Python embedding API 을 사용하여 Python 코드를 호출하는 것입니다. 전체 Python 인터프리터, 표준 라이브러리 및 모든 Python 코드는 이후 독자적인 사용을 위해 앱에 패키징됩니다.
Python 표준 라이브러리는 Android에서 눈에 띄는 누락 및 제한 사항이 있습니다. 자세한 내용은 :ref:`API availability guide <mobile-availability>`를 참조하세요.
6.1. Android 앱에 Python 추가하기¶
대부분의 애플리케이션 개발자는 훨씬 수월한 경험을 제공하는 다음 도구 중 하나를 사용해야 합니다.
이 모든 것을 수동으로 처리하겠다고 확신한다면, 계속 읽으십시오. 안내로는 :source:`testbed app <Android/testbed>`를 사용할 수 있으며, 아래의 각 단계에는 관련 파일로 연결되는 링크가 포함되어 있습니다.
먼저, 안드로이드용 Python 빌드를 확보해야 합니다:
가장 쉬운 방법은 python.org <https://www.python.org/downloads/android/>`에서 안드로이드 릴리스를 다운로드하는 것입니다. 아래에서 언급된 ``prefix` 디렉토리는 패키지의 최상위 레벨에 있습니다.
또는 직접 빌드하려면 Android/README.md`의 지침을 따르십시오. ``prefix` 디렉토리는
cross-build/HOST아래에 생성됩니다.
다음 항목들을 프로젝트에 복사하려면 build.gradle 파일에 코드를 추가하십시오. 사용자 자신의 Python 코드를 제외한 모든 항목은
prefix/lib에서 복사할 수 있습니다:JNI 라이브러리에서:
libpython*.*.solib*_python.so(OpenSSL과 같은 외부 라이브러리)
자산(assets)에서:
python*.*(Python 표준 라이브러리)python*.*/site-packages(사용자 자신의 Python 코드)
앱에 코드를 추가하여 :source:`자산을 파일 시스템에 추출합니다 <Android/testbed/app/src/main/java/org/python/testbed/MainActivity.kt>`를 참조하십시오.
앱에 코드를 추가하여 :source:`임베디드 모드에서 Python을 시작합니다 <Android/testbed/app/src/main/c/main_activity.c>`를 참조하십시오. 이는 JNI를 통해 호출해야 하는 C 코드여야 합니다.
6.2. 안드로이드용 Python 패키지 빌드¶
Python 패키지는 휠 형태로 빌드되어 PyPI에릴리스할 수 있습니다. 이 작업을 수행하는 데 권장되는 도구는 `cibuildwheel <https://cibuildwheel.pypa.io/en/stable/platforms/#android>`이며, 이는 크로스 컴파일 환경 설정, 휠 빌드, 에뮬레이터 테스트의 모든 세부 사항을 자동화합니다.