Android Studio 3.xのexternalNativeBuildでcmakeを使ってビルドをする場合、デフォルトでcmake3.6(SDK Managerでインストールしている場合3.6.4111459)になります。
でもcmake3.10も使いたいのです。いつもじゃなくても普段はcmake3.6で良くてもcmake3.10使いたいプロジェクトあるやん?SDK Managerではcmake3.10(3.10.2.4988404)もインストール可能ですが、自動では使ってくれません。
Android DevelopersのCmakeやプロジェクトへの C / C++ コードの追加を見ると…書いてねぇ(´・ω・`)
グルグル先生に聞いたりstack overflowを見る限りではbuild.gradleでcmakeのバージョンを指定すれば動くんじゃと書いてあります。例えばcmake3.10にしようとすると次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
android { ... defaultConfig { ... externalNativeBuild { cmake { version '3.10.+' ... } } ... } ... } ... |
しかぁ〜し、おうちのAndroid Studio(3.4.xや3.5.x)だとうまくいきません。いつもデフォのcmake3.6.xに鳴ってなってしまいます。なんでやねん(●`ε´●)
自分はNDKのバージョンを指定したいのでSDK ManagerでインストールするNDKではなく別途ダウンロード・展開した単体のNDKをlocal.propertiesファイルのndk.dirで指定して使っている影響もあるのかもしれませんが。
ということで色々調べてみた結果はこれ?
local.propertiesファイルに”cmake.dir={使いたいcmakeにあるディレクトリへのフルパス}”を指定する。
※local.propertiesファイルはASプロジェクトのルートに置きます。大抵は自動で生成されてsdk.dirが設定されているはずです。
例えばおうちのまっくみにだとこんな感じに指定します。
1 |
cmake.dir=/Volumes/SSD/saki/android-sdks/cmake/3.10.2.4988404/ |
ここで大事なのは、実際のcmakeのバイナリが存在するディレクトリを指定するのではないということです(←これに騙されてしばらく悩んだ)
上のパスで言えば実際のcmakeのバイナリは
/Volumes/SSD/saki/android-sdks/cmake/3.10.2.4988404/bin/cmakeですが、それよりも2つ上のバージョン名ディレクトリを指定しないといけないのです。
ということでわかってみればなんということはないですが知らないと永遠に使えるようにならないexternalNativeBuildの罠でした。
ちゃんちゃん(^_-)/~~~
2019/09/18追記:
ASのc++用プロジェクト魔法使い使ったら、もっと簡単な方法がわかったぞい✨
上で書いたのはdefaltConfig下にあるexternalNativeBuildなんだけど、もう一箇所CMakeLists.txtを指定するためのexternalNativeBuildブロックがandroidブロック直下にあって、そっちならlocal.propertiesを編集しなくてもcmakeのバージョンを指定できるみたい(SDK Managerでダウンロードしてあるcmakeの場合。SDK Managerにないバージョンのcmakeだとやっぱりlocal.propertiesでの指定がいる気がする?)。
1 2 3 4 5 6 7 8 9 10 |
android { ... externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" version "3.10.2" } } ... } |
ただしこちらはバージョン番号を完全に記入する必要があって、”3.10.+”みたいな書き方はできないみたいです。