ここからがほんともう大変だった💦💦
nimのドキュメントに"Cross compilation for Android"って章があって、それを読むと次のような事が書いてある。
Normal Android apps are written in Java, to use Nim inside an Android app you need a small Java stub that calls out to a native library written in Nim using the NDK. You can also use native-acitivty to have the Java stub be auto generated for you.
Use nim c -c --cpu:arm --os:android -d:androidNDK --noMain:on to generate the C source files you need to include in your Android Studio project. Add the generated C files to CMake build script in your Android project. Then do the final compile with Android Studio which uses Gradle to call CMake to compile the project.
最近お気に入りのDeepLで翻訳してみると、一旦こんな感じのコンパイルオプションでC言語に変換して、それをAndroidのプロジェクトに追加してくれと書かれているみたいだ(多分)。
そういう事なので、NimをC言語にトランスパイアするための設定をプロジェクトのgradleに追加していきます。
修正したのは [プロジェクトフォルダ]\app\build.gradle になります。
36~49行目にpreBuildタスクに依存関係を追加して、そこでnimのコンパイルをするようにしています。
オプションとして、--nimcache:src/main/cpp を追加することにより、トランスパイアされたC言語のソースをcppフォルダに作成するようにしています(元々あったcppファイルは削除しています)。
gradleについては頑張って調べたりしたのですが、どうも良い文献が見当たらず試行錯誤でこういう形になりました。
これが良い方法なのかは分からない(多分もっと良い方法があるのだろう)し、本来はきちんとcmakeとか使って実行すべきなのだとは思いますが、いつまでもここでつまづいていては先に進まないので、これで進めることにしました。
ここで一度IDEAからビルドを行います。
結果はエラーとなるのですが、Cのソースは [プロジェクトフォルダ]\app\src\main\cpp フォルダに作成されています。
jim関連の変換後ファイルについてはインストールされたフォルダ名を含んでいるようです。ユーザフォルダ名が含まれているのでその部分は****にしてあります。
次にのCソースをgredle上でコンパイル出来るようにするため [プロジェクトフォルダ]\app\src\main\cpp\CMakeLists.txt を修正します。
7行目に、Nimのライブラリのパス(自分の場合は D:/devtools/nim/lib)を追加し、
21~28行目に今回Nimから出力されたCのソースファイルをコンパイル対象として追加しています。
これでコンパイルが通るはずですが、Nimで出力されたソースを毎回全て記載しないと駄目って、いまいちスマートじゃない。 ここももう少し良い方法があるとは思うのですが、例の如く調べても分からなかったので、今回はこれで妥協します。