さっき決めたブログ

[Nim]IntelliJ IDEA+NimでAndroidアプリを作成したかったが、いまいちだった件

2020年10月5日 6:40 PM01.91KNimPROGRAMNimgccAndroidIntelliJ_IDEAndk

Androidプロジェクトの設定を変更する

ここからがほんともう大変だった💦💦

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で出力されたソースを毎回全て記載しないと駄目って、いまいちスマートじゃない。 ここももう少し良い方法があるとは思うのですが、例の如く調べても分からなかったので、今回はこれで妥協します。

投稿者プロフィール

KARASU
うーん いろいろ考え中。。。

コメント

コメント取得中...

関連記事

TOPへ