見出し画像

Android StudioでPython実行しようと思ったら理解不足だった件

前回の、取り組みはじめの段階はこちら

続く今回、カンタンな処理を実行しようとしたら動かなくて、
やっぱりちゃんと理解しないとダメだな?と気づいたお話。

前回、build.grade(app)の、
defaultConfig{ }内に追加したコード

        python {
            pip {
                //Pythonのライブラリをインストールする。
                install "numpy"
            }
        }

前回のままでは通らないんですよね。。
そもそも"numpy"ってどこの何なんだ?とか、
理解不足なので一旦、コメントアウトします。

        python {
            pip {
                //Pythonのライブラリをインストールする。
                //install "numpy"
            }
        }

これでアプリは起動できるようになって、
ちょっと何か処理を実行しようと、
MainActivity内に下のような処理を書いてみると、

        //Pythonのインスタンスを取得
        Python py = Python.getInstance();
        PyObject pyobj = null;
        //Pythonのモジュールを取得
        pyobj = py.getModule("hello");

始めのインスタンス取得の段階で落ちます。
(前回からの流れのままだと落ちます)

        //Pythonのインスタンスを取得
        Python py = Python.getInstance();

これを解決するためにはマニュフェストの、
<application 内に下のコードを追加する必要があります。

          android:name="com.chaquo.python.android.PyApplication"

すると、インスタンス取得できますが、
次の、モジュール取得でまた落ちます。

        //Pythonのモジュールを取得
        pyobj = py.getModule("hello");

そこで流石に、バカなりに気づきました。
"hello"って、そんなモジュールないでしょ?
という状況に、

そうなるとバカなエンジニアは、
次に何を考えるのか?と言うと、

こんな風に、
エラーメッセージを読んでみたり、
GitHub Copilotさんに質問したりしました。
 (//Q: //A:が、Copilotさんとのやり取り)

        try {
            //Q:py.getModule("hello")の引数は何を指定すればいいのか?
            //A:Pythonのファイル名を指定する
            //Q:Pythonのファイルとは?
            //A:app/src/main/python/にあるファイル
            pyobj = py.getModule("hello");
        }catch (PyException e) {
            String s =  e.toString();
            if (!Python.isStarted()) {
                Python.start(new AndroidPlatform(this));
            }
        }

はい。
やっと少し理解が進みました。
そうなんです。

自分のプロジェクトファイル内の
” app/src/main/python/ ”フォルダ内に、
Python関数として処理が存在しないだけなんです。

下の画像のような感じで、
所定の場所にファイルを追加すると、
モジュールとして存在する状態になり、

pythonフォルダに追加したファイル
        //Pythonのモジュールを取得
        pyobj = py.getModule("hello");

あとは該当するファイル内に、
Pythonの関数として書かれていればOK。

そして、ここまでくると、
冒頭のライブラリの件も分ってきます。

そのライブラリはどこの何なのか?
そこを確認できると解決しそうです。

ということで、
今回は進展がありませんが、
ちゃんと理解しないとダメ。
という当たり前のお話でした。

次回こそは、
カンタンな処理を書いて実行するところを紹介します。

-この記事は、アプリ開発経験はあるけどPython未経験という非ITエンジニアが、Android Studio環境でPythonプログラミングを始めるためのステップを紹介します。書き手自身の経験や学びから、Android Studioの具体例を交えて紹介します。

この記事が気に入ったらサポートをしてみませんか?