Android build 環境步驟,使用 python for android
---
[檔案位置](https://drive.google.com/drive/folders/1AkQsk3eyHIhI2PUR0a-CXoetMGrPNUMB?usp=share_link)
1.下載 [Android SDK](https://developer.android.com/studio/index.html)

解壓縮後得到 cmdline-tools 資料夾,將資料夾名稱改成 Android_SDK (以下用 path_to_Android_SDK 代表指到此資料夾的路徑)
- 執行下列命令安裝 sdk
```
path_to_Android_SDK/bin/sdkmanager "platforms;android-27" --sdk_root=path_to_Android_SDK
```
- 執行下列命令安裝 build_tools
```
path_to_Android_SDK/bin/sdkmanager "build-tools;28.0.2" --sdk_root=path_to_Android_SDK
```
2. 下載 [Android NDK](https://developer.android.com/ndk/downloads?hl=zh-tw)

開啟下載好的 dmg 檔後開啟,右鍵選擇"顯示內容"(show package contents)

把 NDK 資料夾複製出來,改名為Android_NDK

3.設定環境變數(下面的路徑和版本改成自己電腦的)
```
# Adjust the paths!
export ANDROIDSDK="$HOME/Documents/android-sdk-27"
export ANDROIDNDK="$HOME/Documents/android-ndk-r25b"
export ANDROIDAPI="27" # Target API version of your application
export NDKAPI="21" # Minimum supported API version of your application
export ANDROIDNDKVER="r10e" # Version of the NDK you installed
```
3. 使用 [參考](https://medium.com/@k1992313/python-for-android-踩雷心得-f07ac9c106ac)
```
p4a apk --private ./ \
--requirements=python3,kivy \
--bootstrap=sdl2 \
--arch=arm64-v8a \
--pakage=example.hello --name="HelloKivy" \
--dist_name=testHelloKivy \
--ndk_dir=$ANDROIDNDK --sdk_dir=$ANDROIDSDK\
--release
```
重要的幾項參數
- ndk_dir, sdk_dir分別指向android ndk和sdk的位置,其中sdk可用sdkmanager安裝特定版本的SDK,而NDK請到android的官網尋找適當的版本。此例是使用SDK29, NDK 17c編譯而成。
- requirements為需要打包的套件,我所知目前支援的套件有numpy, matplotlib, cryptography, usb4a, pyjnius,pyserial尚待確認。
- arch 為設定目標平台
- release為是否釋出之版本
執行完成後,會在當下目錄產生APK檔,即可安裝入android系統內。
```
p4a apk --private /Users/2020mac01/Documents/測量與空間資訊_project/xml_parser練習/kivy_測試_android/basic_apk_資料夾/ \
--package=org.test.myapp \
--name "MY CAMERA" \
--version 0.1 \
--bootstrap=sdl2 \
--requirements=python3,kivy,openssl,android,pyjnius,plyer,pillow,bs4,requests,urllib3,idna,chardet,lxml,sdl2,pyobjus,tqdm,oscpy \
--sdk_dir=/Users/2020mac01/Documents/Android_project/ANDROID_SDK/ \
--ndk_dir=/Users/2020mac01/Documents/Android_project/ANDROID_NDK/ \
--arch=arm64-v8a \
--arch=armeabi-v7a \
--permission android.permission.READ_EXTERNAL_STORAGE \
--permission android.permission.WRITE_EXTERNAL_STORAGE \
--permission android.permission.CAMERA \
--permission android.permission.INTERNET \
--service=Autopredictor:myservice.py
```