Buildozerは公式ではWindows非対応なんですが、Dockerならなんとかならいかと思ってやってみてあっさり諦めたのでメモがてら供養でも
とりあえず公式のGithubにあったdockerfileを参考に作ってみた
FROM ubuntu:20.04
ENV USER="user"
ENV HOME_DIR="/home/${USER}"
ENV WORK_DIR="${HOME_DIR}/work" \
SRC_DIR="${HOME_DIR}/src" \
PATH="${HOME_DIR}/.local/bin:${PATH}"
RUN apt update -qq > /dev/null \
&& DEBIAN_FRONTEND=noninteractive apt install -qq --yes --no-install-recommends \
locales && \
locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:en
ENV LC_ALL ja_JP.UTF-8
RUN apt update -qq > /dev/null \
&& DEBIAN_FRONTEND=noninteractive apt install -qq --yes --no-install-recommends \
autoconf \
automake \
build-essential \
ccache \
cmake \
gettext \
git \
libffi-dev \
libltdl-dev \
libssl-dev \
libtool \
openjdk-13-jdk \
patch \
pkg-config \
python3-pip \
python3-setuptools \
sudo \
unzip \
zip \
zlib1g-dev
RUN useradd --create-home --shell /bin/bash ${USER}
RUN usermod -append --groups sudo ${USER}
RUN echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
USER ${USER}
WORKDIR ${WORK_DIR}
RUN git clone https://github.com/kivy/buildozer ${SRC_DIR}
RUN pip install --user --upgrade pip Cython==0.29.19 wheel virtualenv ${SRC_DIR}
ENTRYPOINT ["buildozer"]
公式では予めgit cloneしておいたファイル郡をdockerfileと同じフォルダに入れておいて、そのファイルを${SRC_DIR}にコピーするような感じで作られていたが、
面倒なのでdocker環境でgit cloneするように書き換えた。
docker build . -t buildozer
これをbuildするとaptやpipによるライブラリのインストールにものすごい時間がかかった。
なんとかbuildを終えてbuildozerを使えるようになったので
from kivy.app import App
from kivy.uix.label import Label
class HelloApp(App):
def build(self):
return Label(text='Hello World')
if __name__ == '__main__':
HelloApp().run()
どこかから拾ってきた適当なサンプルを用意して早速実行開始。
docker run -it --rm -v %CD%:/home/user/work -v %CD%\..\buildozer_tool:/home/user/.buildozer buildozer init
docker run -it --rm -v %CD%:/home/user/work -v %CD%\..\buildozer_tool:/home/user/.buildozer buildozer android debug
必要ライブラリのダウンロード・展開からビルドまで全部勝手にやってくれますが、
とにかく凄まじいほど時間がかかります。
ダウンロード・展開にも時間がかかるので、ライブラリのダウンロード先もWindows側のフォルダにバインドしないと、
ビルドするたびにダウンロード・展開をやらかしそうだったのでコマンドラインが長い感じに・・・シンプルにしたかったのに。
しかしそのままWindowsフォルダにバインドしていると展開中に上書き確認されてしまいます。
どうやらandroid-ndk-r19cのsysroot\usr\include\linux\netfilter
に大文字と小文字が違うだけの同名ファイルがあるらしく、
Windowsでは同じファイル扱いなのでこのようなことになっているようです。
NTFS自体は大文字小文字の区別には対応しているのですが、Windowsではデフォルトで無効になっているだけなので、
fsutil.exe file setCaseSensitiveInfo %CD% enable
fsutil.exe file setCaseSensitiveInfo %CD%..\buildozer_tool enable
こんな感じで有効化しておきます。
というわけでビルドまでこぎつけましたが、これがまた凄まじい時間がかかります。
正確には測ってませんが3~4時間くらい?
で、待ちに待った結果なんとかapkは作ってくれたのでBlueStacks上でインストールして起動してみたら
ロゴまでは表示されましたが、そこからすぐに終了してしまってうまくいきませんでした。
ここで心が折れました。