Flet CLI는 'flet build apk'와 'flet build aab'명령을 제공하여 APK와 AAB를 패키징할 수 있게 한다.
Native Python packages는 C, Rust 또는 기타 언어로 작성한 것으로 numpy, cryptography, lxml, pydantic과 같은 것이 그 예이다. 'flet build'로 flet앱으로 패키징할 때, whl에 없기 때문에 Pypi로 부터 Native Python packages를 설치할 수 없다. 따라서 Native Python packages를 사전에 컴파일해야 한다.
Flet은 Kivy를 사용하여 안드로이드 패키지를 빌드한다. 커스텀 패키지로 자신만의 파이썬 배포판을 빌드하고 flet build를 사용하려면, Kivy가 제공하는 p4a툴을 사용할 필요가 있다.
안드로이드 SDK를 얻으려면 안드로이드 스튜디오를 설치한다. macOS 안드로이드 SDK는 $HOME/Library/Android/sdk에 있다. sdkmanager 툴이 요구하는 JRE를 얻으려면 Temurin8을 인스톨한다.
brew install --cask temurin8
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home
환경변수도 다음과 같이 설정한다.
export ANDROID_SDK_ROOT="$HOME/Library/Android/sdk"
export NDK_VERSION=25.2.9519653
export SDK_VERSION=android-33
그리고 sdkmanager 경로를 PATH에 추가한다.
export PATH=$ANDROID_SDK_ROOT/tools/bin:$PATH
https://developer.android.com/ndk/downloads/로부터 안드로이드SDK와 NDK를 인스톨한다 또는 안드로이드 SDK Manager로 인스톨한다.
echo "y" | sdkmanager --install "ndk;$NDK_VERSION" --channel=3
echo "y" | sdkmanager --install "platforms;$SDK_VERSION"
그리고 새 가상개발환경도 만든다.
python3 -m venv .venv
source .venv/bin/activate
p4a를 인스톨한다-flet build가 만드는 코드와 호환되는 Python3.11.6에 고정되어 있다.
cython도 인스톨한다.
pip install --upgrade cython
--requirements 스위치와 같이 p4a를 실행한다. 가령 numpy와 같은 라이브러리를 포함한다.
p4a create --requirements numpy --arch arm64-v8a --arch armeabi-v7a --arch x86_64 --sdk-dir $ANDROID_SDK_ROOT --ndk-dir $ANDROID_SDK_ROOT/ndk/$NDK_VERSION --dist-name mydist
중간에 "Do you want automatically install prerequisite JDK? [y/N]" 질문에 No를 선택한다.
p4a명령이 완료되면 다음과 같은 위치에 만들어 진다.
$HOME/.python-for-android/dists/mydist
flet build apk를 실행한 터미널에서 다음 명령으로 SERIOUS_PYTHON_P4A_DIST 환경변수 경로에 저장된다.
export SERIOUS_PYTHON_P4A_DIST=$HOME/.python-for-android/dists/mydist
flet build apk 를 실행하면 apk파일이 만들어 진다.
이 명령은 배포버전을 만든다. 배포판은 디버깅을 지원하지 않으며 앱스토어 배포하기 적합하다. 플레이스토어에 배포한다면 AAB를 사용하거나 사이즈를 줄이기 위해 APK를 쪼개는 걸 추천한다.
기본적으로 생성된 안드로이드앱은 asset 폴더내 이미지를 가지고 스플래시화면을 보여준다. --no-android-splash 옵션으로 스플래시를 끌 수 있다.
장치에 APK를 인스톨하는 가장 쉬운 방법은 adb툴을 사용하는 것이다. adb는 안드로이드SDK 일부이다. 예를 들어 macOS에선 안드로드스튜디오롤 안드로이드SDK로 인스톨하였다면 adb 위치는 ~/Library/Android/sdk/platform-tools/adb 이다.
다음의 명령으로 APK를 인스톨하려면
adb install <path-to-your.apk>
여러 장치가 컴퓨터에 연결되어 있다면 -s옵션을 사용하여 원하는 장치에 apk를 인스톨할 수 있다.
adb -s <device> install <path-to-your.apk>
는 adb devics명령으로 확인할 수 있다.
이명령은 AAB파일을 빌드하기 위한 것으로 디버깅을 지원하지 않고 플레이스토어에 배포하기 적합하다.
기본적으로 생성된 안드로이드앱은 asset 폴더내 이미지를 가지고 스플래시화면을 보여준다. --no-android-splash 옵션으로 스플래시를 끌 수 있다.
APK를 장치(즉, 스마트폰)에 설치하는 가장 쉬운 방법은 adb(Android Debug Bridge)툴을 사용하는 것이다. adb는 안드로이드SDK의 일부다. 맥OS의 경우 안드로이드 스튜디오로 안드로이드SDK를 설치했다면 adb는 ~/Library/Android/sdk/platform-tools/adb에 설치되어 있을 것이다. 장치에 APK를 설치하려면:
adb install <path-to-your.apk>
컴퓨터에 여러 장치가 연결되어 있다면(가령 에뮬레이터와 실물폰), -s옵션을 사용하여 .apk를 설치하려면 장치를 지정할 수 있다.
adb -s <device> install <path-to-your.apk>
는 adb devices 명령으로 확인가능하다.
이 명령은 릴리즈버전을 빌드한다. 릴리즈빌드는 디버깅을 지원않으며 앱스토어배포에 적합하다. 앱사이즈를 줄일 수 있어 플레이스토어에 출시하기 좋은 방법이다.
기본적으로 asset폴더내 이미지 파일이나 Flet로고를 스플래시화면을 가진다. --no-android-splash옵션으로 스플래시를 끌 수 있다.