見出し画像

Chaquopyからpip経由でpythonライブラリをインストール【Androidアプリ開発】

Pythonでのパッケージ管理といえばpip

Chaquopyでも当然pipが使えます。

しかもAndroid Studio内から直接です。

その入れ方とか設定方法を解説

ChaquopyはAndroidからpythonを呼び出せるAPI

Chaquopyはやっぱり知名度低いですね。

でもAndroidからpythonを独立実行できる優れものです。

▼ 詳しい導入手順はこのnoteで解説した

この手順でChaquopy導入してる前提です。この先の内容は

まずはChaquopyでのpythonライブラリの制限について

Chaquopyはほぼ全ての標準ライブラリに対応してます。

ところが以下はOS互換性などで使えません

  • crypt

  • grp

  • nis

  • spwd

そして以下も諸事情があって使えないみたいです。

  • curses

  • dbm.gnu

  • dbm.ndbm

  • readline

  • tkinter

  • turtle

最初の4つはOS依存のパッケージであり、Androidでは動かせない模様です。もしこれらのライブラリが必要な場合、代替ライブラリを探してください。

逆に言えばライブラリの制限はこれだけ。上記10個とそれらに依存するライブラリでなければ、ほぼ何でもインストールできます。

ただしアプリ容量が許す範囲内です。

数百MBになるようなライブラリもインストールできるし動かせるけど、それが快適に動くかは別問題。そもそもGooglePlayでは 150MB >= のAPKは受け付けてくれません。

build.gradleにてpipからライブラリインストール

では具体的なインストール方法について

まずアプリレベルのbuild.gradleを開きます

▼ 赤枠で囲ったのがそれ

▼ その中のdefaultConfigブロックに注目

defaultConfig {
    applicationId "com.example.example"
    minSdkVersion 21
    targetSdkVersion 31
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    /// 以下略…
}

androidブロック => defaultConfigブロックには色々な設定が書けます。以前の記事でもここにABIFiltersとかPythonビルドパスの設定を書きました。

そのdefaultConfigブロックにさらにpythonブロックを追加します。その下のpipブロックにインストール構成を書けばOKです。

▼ 例えばrequestsをインストールしたい場合

defaultConfig {
    applicationId "com.example.example"
    minSdkVersion 21
    targetSdkVersion 31
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    python {
        pip {
            /// requestsインストール
            install "requests"
        }
    }

    /// 以下略…
}

このように install "requests" と書けば必要なパッケージがインストール可能。これ以外は特別なことをする必要もありません。

それからライブラリバージョンを指定したい場合、== のあとにバージョン名を書けばいいだけです。(次のコードを参照)

▼ バージョン名指定でインストール

python {
    pip {
        /// requestsインストール
        install "requests==2.24.0"
        
        /// numpyインストール
        install "numpy"

        /// pillowインストール
        install "pillow"
    }
}

Pythonスクリプトからは普通に import すればOK

requests・通信系ライブラリを使う場合はここに注意!

もしrequests・通信系ライブラリを使う場合…

必ずしておくべきAndroid側設定があります。

それはINTERNETパーミッションの付与です

▼ AndroidManifest.xmlに以下を追加する

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

これないと通信できないので注意!

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