Python は、読みやすさ、学習の容易さ、柔軟性などの特定の望ましい機能により、非常に人気のあるプログラミング言語です。
そのため、スクリプト、Web 開発、サイバー セキュリティ、機械学習などのコンピューター プログラミングのさまざまな分野や側面で広く採用されています。
Python には、これらのさまざまな分野での使用に適応する多くのライブラリとフレームワークがあります。たとえば、Django と Flask は Web 開発で使用される Python フレームワークです。 Pandas、Numpy、Scikit-learn、PyTorch などは機械学習で使用され、Scapy、Beautiful Soup、Cryptography などの Python ライブラリはサイバー セキュリティで使用されます。
Python が実際に広く使用されていないプログラミング分野の 1 つは、モバイル開発です。
これは、Python の実行が比較的遅いという事実 (したがって、仕様の低いモバイル デバイスでは Python アプリが苦労する可能性がある) と、インタープリター型の高水準言語である Python とはかけ離れているという事実に起因します。モバイル オペレーティング システムのネイティブ言語 (つまり、Android 用の Java や iOS 用の Objective-c/Swift など) ではうまく動作しません。これらは一般的にコンパイルされた中間レベルの言語です。
しかし、モバイル開発における Python のこの欠点は、多くのプログラマーにとって問題です。Python は、基本的にプログラミングの初心者にとって最も人気のある最初の言語であり、何十億ものモバイルのおかげで非常に収益性の高いモバイル開発を掘り下げたいと思うかもしれません。世界中で使用されているデバイス。
また、Web 開発、人工知能、またはサイバー セキュリティのために既に Python 言語を使用している Python の専門家も、何らかの理由でソフトウェアをモバイル アプリに変換したいと考えるかもしれません。
これは確かに、Python を学び、モバイル アプリを作成して、私が書いたスクリプトの一部を役に立つと思われるユーザーに提供することを決定した後に直面した問題でした。
ただし、Python をモバイル開発に使用することは一般的ではありませんが、不可能ではありません。実際、Python を使用したモバイル開発用のフレームワークとライブラリがいくつか存在し、かなり大きなコミュニティを持つものもいくつかあります。
それらのいくつかは、Python-for-Android、Pymob、PyQT(pyqtdeploy)、Kivy、RenPi、および Beeware です。
これらのフレームワークの一部は、UI 開発用の Python の使いやすい構文も継承しています (Kivy デザイン言語など)。これにより、小規模なアプリケーションやラピッド プロトタイピングに使用する場合、Python は非常に便利なモバイル アプリケーション開発言語になります。
ただし、モバイル向けの完成した Python アプリをコンパイルまたはパッケージ化しようとすると、多くの問題が発生します。少なくとも、これは Kivy での私の経験であり、私の調査では、これが一般的に経験される問題であることが示されました。
この問題の理由の 1 つは、軽量の Python モバイル ライブラリが、Flutter や React Native などの一般的なフレームワークほど、Android スタジオの洗練されたデバッグ リソースを活用していないことが多いためです。
この記事では、このパッケージングの問題と、それらを克服するためのベスト プラクティスに関連して、Python を使用したモバイル開発について詳しく説明します。
Kivy: これは実際にはクロスプラットフォームの Python フレームワークであり、ユーザーは Windows、Mac、Linux、Android、および iOS 用のアプリケーションを作成できます。 Kivy はクリーンなデザイン言語を使用して、すべてのプラットフォームで同様の UI を開発します。アプリケーションのプログラミングとパッケージには純粋な Python を使用します (たとえば、buildozer は特定のプラットフォームへのコードの展開に使用されます)。
Pyqtdeploy: これは、PyQt CLI および GUI アプリケーションまたはライブラリをデスクトップおよびモバイル デバイスにパッケージ化するための一連のツールを提供します。このツールでパッケージ化されたプロジェクトは、ライセンスが無料であるため商用化できます。
Beeware: これは、Toga (クロスプラットフォーム UI 用のツールキット)、Batavia (Javascript ハンドラー)、およびモバイルおよびデスクトップ用のアプリをパッケージ化するためのブリーフケースを含む、Python アプリを構築するための一連のツールです。 Beeware アプリには、プラットフォーム固有のルック アンド フィールがあります。
多くの場合、開発プロセスはスムーズで簡単ですが、Python アプリを任意のプラットフォーム用にパッケージ化することは、多くの場合問題になります。モバイルに加えて、Pyinstaller を使用して Python exe ファイルをパッケージ化しようとしたときにも、この問題が発生しました。
アプリケーションでサードパーティの Python ライブラリが使用されている場合、この問題はさらに悪化します。
私の経験から、アプリケーションをパッケージ化する際のこのようなバグの嵐は、次の 2 つの主な理由に集約されます。
Python モバイル開発ライブラリは、Android エミュレーターまたは Android デバイスを使用したリアルタイム アプリケーション開発をほとんど、またはまったくサポートしていません。
Flutter やリアクション ネイティブを使用するモバイル デベロッパーは、アプリケーションの構築中に仮想デバイスまたは物理デバイスを使用することがいかに便利であるかを理解するでしょう。これは、あらゆる種類の構文、実行時、および互換性エラーを早期に発見して、迅速に修正するのに役立ちます。
ただし、Python ライブラリを使用する場合、開発者は通常、モバイル デバイス用の APK バージョンをパッケージ化する前に、デスクトップ デバイスでアプリケーションをビルドする必要があります。
これにより、Android または iOS ツールがアプリケーションのコードと対話し始めると、多くの互換性の問題が発生する可能性があります。
したがって、問題は、デスクトップ環境用に構築されたアプリケーションがモバイル用にパッケージ化されていることです。
これはかなり明白に思えるかもしれませんが、開発者は Python モバイル アプリケーションをパッケージ化する際にこの点を念頭に置いておく必要があります。これは、端末が (私の場合のように) 指摘しない可能性があるためです。
これは貴重な開発時間を浪費する可能性があり、開発者があきらめてしまうほどイライラすることさえあります。
サードパーティ ライブラリの使用。
私の経験から、これは指摘する必要があると思います。 Python プログラムをパッケージ化しようとしたときに、Windows 実行可能ファイルとして作成しました。
驚いたことに、プログラムは Python ターミナル上で問題なく動作していましたが、アプリケーションをパッケージ化する際に、サードパーティ ライブラリから非互換性の苦情を受けました。
これは、Python プログラムをモバイル アプリケーションとしてパッケージ化するときにも発生する可能性があります。
端末が存在するすべてのエラーを指摘するとは限りません。
使用するライブラリのバージョンの互換性を調査します。
オーバーフローを引き起こすことなくモバイル デバイスに適応できる動的 UI を構築します。
詳細なエラー レポートを表示するには、利用可能な追加のデバッグ コマンドを使用します。
アプリがモバイル デバイスで実行されている場合は、logcat リーダーなどのデバッグ アプリケーションを使用して、追加のターミナル レポートを取得します。