お久しぶりです。先月末に育休から復帰しました。
そして数日前からRustを学んでいて、元々の専門分野がAndroid/iOSなので、Android NDKでRustを動かそう!と思い立ちました。
GitHub repository
やったこと
- Rust for Androidで必要なものを入れる(Readme#how-to-setup-this-project)
- Android Studioで新規プロジェクト作成、Native C++を選択(diff)
- C++のJNIをRustに置き換え(diff)
- Hello Worldをちょっとしたものに作り替え(diff)
できたもの
Rust勉強目的で作ったgeneratorモジュールで、人のプロフィールっぽい情報を生成し、それをKotlin側で表示するアプリです。
- 2021/5/6更新 趣味を5つ持たせる機能を追加しました(diff)
起動する度に様々な人のプロフィールが作られます。小説のキャラクター作りに使えるかもしれません。
仕様は以下です。
* 日本人名であり得ない頭文字は出ない。'X'とか
* だいたい18歳〜54歳の人とマッチングする(生後6667日〜19999日の範囲)
* 趣味は60の配列から重複しない5つが選ばれる
なお当初は円周率1億桁の計算をKotlinとRustで性能比較するアプリの予定でしたが、それなりに数学の知識を求められたのと、最初から1機能ガッツリ作るよりまず日付型を扱うとかありがちな処理から始めて基礎を固めたかったので、こういう形に方針転換しました。
開発環境について
懸念されたAndroid Studio上でのRustコーディングですが、コンパイルエラーの原因究明時は特に困りませんでした。
しかし、rsファイルの強調表示や補完を使えず、Rustのプラグインも本日時点では見つからなかったので、Rustプラグインを入れたVSCodeで書くほうが便利でした。
苦労したこと
文字列型の種類で、場所によってString、jstring、CString、&strをそれぞれ要求されて、C++の案件で受けた洗礼を思い出しました。
ここはStringの配列をKotlinに渡そうと苦労した部分です。new_object_array
とset_object_array_element
でできることを知り、四苦八苦の末に一応動いたが、書き方として適切なんだろうか。
また、長らくKotlin/Swiftやってた身としてはクレートやスライスなど慣れない概念もあり、まだまだ勉強不足を感じました。今回作ったアプリを弄ったりしながら覚えていこうと思います💪