前回記事でPythonのGUIライブラリーを作るKivyを導入した話を記事にしました。奮闘してkivyを導入した理由は、折角勉強したPythonなので何か形(アプリ)にしたいな、と思ったからです。で、「アプリ開発」「Python」と検索するとkivyとともにヒットするのはbuildozerです。
BuildozerはPythonアプリケーションをモバイルアプリケーションとして簡易にパッケージングするツールで、Andoroidアプリを生成できるらしい。なのでkivyを導入したら、Buildozer導入を目指すのは自然な流れではないかと。
しかしながら、結果、挫折しました。素人なりにあらゆる手段を(素人なので思いつく手段は数える程度ですけど)尽くしましたが、ギブアップ。
数日粘りましたが収穫なしなので、浪費した時間がもったいないですね。
もうちょっとでクリアできそうな気がしたので、なかなか後に引けなかったのも浪費の原因です。
心残りなので...もし詳しい方の目に留まって、答え合わせをしてくれたらな...
それなりに、いくつかの関門は突破したので、なにかの役にたったりして?
という気持ちで記事にしてみました。
インストール自体はすんなり完了した
pip3 install --upgrade buildozer
エラーなしでインストール完了。適当な作業フォルダを作って、そのフォルダ内にmain.pyを作成。(他のファイル名だとダメらしい)作業フォルダ内で以下を実行。
buildozer init
buildozer.specが生成されます。そしてデバックします。
buildozer -V android debug
さあ、ここからがどの沼の始まりです。
エラーその1 javaが無い
Java compiler (javac) not found, pleas install it.
確かに公式HPを見ると、openjdk-8-jdkとopenjdk-8-jreが必要と書いてある。しかしapt-get installしようとしたが「パッケージが見つかりません」らしい。仕方がないのでopenjdk-11-jdkとopenjdk-11-jreをインストールすると、このエラーは突破できた。(ただし、振り返ってみると、本当はopenjdk-8-jdkを死ぬ気で導入しなければいけなかったのではないか?と後々思うことになります)
エラーその2 android ndkが無い
無いと言われたら入れるしか無い。手順としては、公式HPにアップされているものをダウンロードしてきて任意フォルダに解凍するということらしい。とりあえず最新のものを入れようか。ということで以下のものをダウンロードしてみました。
android-ndk-r22b-linux-X86_64.zip
ダウンロードしてみてビックリ。1GBもあるやんけ!ダウンロードしただけでパソコンのハード容量が10GB切ってしまったが、これ解凍したら...。いや、ホンマにこんなデカイの入れるの?と結構躊躇してしまいました。案の定、unzipしたら、ハード残容量は5GB以下に。こんなことになるなら、ケチって32GBモデルにせず、64GBモデルのChromebookを買えば良かった...。
気を取り直して、そもそもndkを解凍するだけだと、エラーは変わりません。ここで、下準備で作ったbuildozer.specの出番です。ndkの存在位置を記載する項目があるはずです(私の環境であればbuildozer.specの109行目に「androidndk_path」という項目がありました)。ここを変更することで、このエラーは突破できました。
エラーその3 Aidl can not be executed
なんだ、この意味不明なエラーは。
とりあえず、ネットを叩いて依存関係がありそうなものを片っ端からapt-get installしましたが改善せず。公式HPにもAidlエラーが出たときの対処法が記載されていましたので、試しましたが、状況変わらず。アカン、キブアップしようかな。そう思ったとき、ひらめきました。エラーになっているところを何気なく眺めていると
Run ~/.buildozer/android/Platform/android-sdk/build-tool/31.0.0/aidl
Aidl can note be executed
いや、そもそも/usr/bin/aidlにも「aidl」おるから、そんな深いところのやつ実行しなくても...。ちなみに、この深い位置にいるaidlを削除して、/usr/bin/配下のaidlをコピーして持ってったらどうなるやろう?
と、試した結果、このエラーは突破しました。
エラーその4 C compiler cannot create executables
これが突破できなかったエラーです
checking whether the C compiler works... no
configure: error: in `/home/*****/*****/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/libffi/armeabi-v7a__ndk_target_21/libffi':
configure: error: C compiler cannot create executables
See `config.log' for more details
config.logでは深い階層にいるClangを実行してエラーになっていました。
(そもそもコイツ何者?と思って検索して、はじめてコンパイラだと気づいた。。gccしか知らんかった)前述のAidlエラーを回避した方法を試しましたが効果はありませんでした。その他、以下は試しましたが、効果はありませんでした
・util.pyを変更する
・ndkのバージョンを19に変更(19推奨との記事を見つけたため)
ここで怪しく思えたのはopenjdkを推奨の8にしてないからでは?ということですが、これを実現するのに難航するうちに気力がなくなってしまいまして。
断念しようと思いました。
これのせいで(あと、いつもそんなに忙しくない本業が一時的に死ぬほど忙しかったので)ブログ更新もままならずでした。このままだといつまでも更新できないので、これで一区切りにして、次の話題を探したいと思います。