概要
Chaquopyを使ってJava/Kotlin製Androidアプリの一部をPythonで実装し、Pythonライブラリを使う方法を紹介します。
本記事ではNumPyで乱数を生成し、Kotlin製Androidアプリの画面に表示します。
Chaquopyとは
Chaquopyとは、Java/Kotlin製AndroidアプリにPythonの実装を組み込むことができるSDKです。SciPyやPyTorchなど豊富なライブラリに対応しており、JavaやKotlinで扱いにくい処理をPythonで記述できます。
以前はライセンスの制約がありましたが、2022/07/24にオープンソース化し、MITライセンスとなったことで使いやすくなりました。
使い方
環境
- MacBook Pro (2020年モデル / BigSur 11.6.4)
- Android Studio (Bumblebee | 2021.1.1 Patch 2)
新規Androidプロジェクトの作成
Python実装を組み込む先のAndroidアプリとして、Empty Activiyの新規プロジェクトを作成します。
プロジェクトの作成方法はこちらをご参照ください。
Chaquopyの追加
公式の手順に従い、top level及びmodule levelのbuild.gradle
に下記を追加します。
plugins {
id 'com.chaquo.python' version '12.0.1' apply false
}
plugins {
id 'com.android.application'
id 'com.chaquo.python'
}
...
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}
ライブラリ(NumPy)の追加
build.gradle
(module level)のdefaultConfig内にrequirementを記述し、NumPyを追加します。
python {
pip {
install "numpy"
}
}
Pythonスクリプトの用意
Chaquopyはデフォルトでsrc/main/python
のPythonスクリプトを読み込みます。
chaquopy_test.py
を作成し、src/main/python
に配置します。
import numpy as np
def create_random_number():
return np.random.rand()
KotlinからPythonスクリプトを呼び出し
生成した乱数を画面に表示するため、更新対象のTextViewにidを追加します。
<TextView
android:id="@+id/text_view"
...
/>
create_random_number
を呼び出して乱数を生成し、TextViewを更新します。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Pythonコードを実行する前にPython.start()の呼び出しが必要
if (!Python.isStarted()) {
Python.start(AndroidPlatform(this))
}
val py = Python.getInstance()
val module = py.getModule("chaquopy_test") // スクリプト名
try {
val randomNumber = module.callAttr("create_random_number").toFloat() // 関数名
findViewById<TextView>(R.id.text_view).text = randomNumber.toString()
} catch (e: PyException) {
Toast.makeText(this, e.message, Toast.LENGTH_LONG).show()
}
}
}
実行
画面に生成した乱数が表示されました。

おわりに
Chaquopyを使うと簡単にPythonスクリプトをAndroidアプリに組み込むことができます。対応しているライブラリやバージョン等の制限はありますが、SciPyやNumPyといった有名どころのライブラリを使う上では十分活用できるのではと思います。
別の記事ではChaquopy+PyTorchでMobileNetv3を動作させる例を紹介しています。