2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

android studio 同期エラー "NDK version is UNKNOWN"

Posted at

新しいAndroid Studioを使用するため、Androidの開発環境を作り直しました。

Android StudioからSync Project with Gradle Filesを行うと失敗し、EventLogに以下の出力がありました。

Gradle sync started with IDEA sync
Project setup started
Gradle sync failed (6 s 705 ms)
NDK Resolution Outcome: Project settings: Gradle model version=4.4, NDK version is UNKNOWN

解決手順と調査したことを記述します。

環境

作成した環境のバージョンです。(関連する項目のみ)

項目 バージョン
Android Studio 3.5.1
Gradle 4.4
Android Gradle Plugin 3.1.2
NDK 20.0.5994570
CMake 3.10.2.4988404 (以下3.10と書く)

Gradle、Android Gradle Pluginのバージョンが古いです。バージョンの更新を怠っているプロジェクトでした。

解決手順

CMake 3.10をアンインストールし、CMake 3.6をインストールします。

image.png

この作業のみで、解決しました。

調査したこと

(1) gradleの出力メッセージ

問題のあった環境でgradle syncを実行した際の出力メッセージの一部です。

14:24:21:Executing task 'sync'...

Executing tasks: [sync] in project C:\Users\hoge

Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html
Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html
External native generate JSON debug: building json with force flag false
External native generate JSON debug: starting JSON generation
(省略)
External native generate JSON debug: executing cmake Executable : C:\android-sdk\cmake\3.10.2.4988404\bin\cmake.exe
arguments : 
(省略)
BUILD FAILED in 1s
14:24:25: Task execution finished 'sync'.

CMake 3.7以上を使用する機能はプレビューであることがわかります。CMake 3.6を使用した方が良さそうです。

(2) デフォルトで使用されるCMakeのバージョン

SDK Managerでは、CMake 3.6、CMake 3.10、両方をインストールすることができます。

image.png

以下のドキュメントでは、CMakeのバージョンを指定する手順とデフォルトで使用するバージョンについて記述されています。

SDK Manager には、CMake の 3.6.0 分岐バージョンとバージョン 3.10.2 が含まれています。build.gradle で特定のバージョンの CMake を設定していないプロジェクトは、CMake 3.6.0 を使用してビルドされます。

この記述により、「このプロジェクトではCMakeのバージョンは指定していないので、両方インストールした場合はCMake3.6が使用される」、と思いました。しかし、実際に両方をインストールして、gradle syncを行った場合、同じエラーになります。

14:29:48: Executing task 'sync'...

Executing tasks: [sync] in project C:\Users\hoge

Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html
Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html
External native generate JSON debug: building json with force flag false
External native generate JSON debug: starting JSON generation
(省略)
External native generate JSON debug: executing cmake Executable : C:\android-sdk\cmake\3.10.2.4988404\bin\cmake.exe
arguments : 
(省略)
BUILD FAILED in 1s
14:29:48: Task execution finished 'sync'.

おそらくですが、「バージョンを設定していない場合にCMake 3.6を使用する」という動作は、Android-Gradle-Plugin 3.3からの動作だと思います。というのは、Android StudioでCMake 3.10をダウンロードできるようになったのは、Android Studio 3.3 だからです。
https://developer.android.com/studio/releases#cmake-3-10-2

実際に、Android-Gradle-Plugin のバージョンを3.3に更新してみます。
gradle :app:generateDebugSourcesを実行した出力メッセージの一部です。
「SDKにあるCMake 3.10.2は要求されたバージョン"3.6.0"とマッチしない。SDKにあるCMake 3.6.4111459は、バージョン"3.6.0"だ。」

14:38:07: Executing task ':app:generateDebugSources --info'...
(省略)
No CMake version was specified in build.gradle. Choosing a suitable version.
Trying to locate CMake in local SDK repository.
CMake '3.10.2' found in SDK did not match requested version '3.6.0'.
- CMake found in SDK at 'C:\android-sdk\cmake\3.6.4111459' had version '3.6.0'
No CMake version was specified in build.gradle. Choosing a suitable version.
Trying to locate CMake in local SDK repository.
CMake '3.10.2' found in SDK did not match requested version '3.6.0'.
- CMake found in SDK at 'C:\android-sdk\cmake\3.6.4111459' had version '3.6.0'
(省略)

BUILD SUCCESSFUL in 1s
5 actionable tasks: 5 up-to-date
14:38:09: Task execution finished ':app:generateDebugSources --info'.

ちなみに、Android-Gradle-Plugin 3.2の場合は、gradle assembleDebug --infoで確認できます。

Executing task 'assembleDebug --info'...
(略)
externalNativeBuildDebug: starting build
externalNativeBuildDebug: reading expected JSONs
externalNativeBuildDebug: done reading expected JSONs
externalNativeBuildDebug: executing build commands for targets that produce .so files or executables
externalNativeBuildDebug: evaluate miniconfig
externalNativeBuildDebug: evaluate library MarshalxIf-Debug-armeabi-v7a
externalNativeBuildDebug: building target library MarshalxIf because no targets are specified.
externalNativeBuildDebug: about to build C:\android-sdk\cmake\3.10.2.4988404\bin\cmake.exe --build C:\Users\
externalNativeBuildDebug: evaluate miniconfig
externalNativeBuildDebug: evaluate library MarshalxIf-Debug-arm64-v8a
externalNativeBuildDebug: building target library MarshalxIf because no targets are specified.
externalNativeBuildDebug: about to build C:\android-sdk\cmake\3.10.2.4988404\bin\cmake.exe --build C:\Users\
externalNativeBuildDebug: evaluate miniconfig
externalNativeBuildDebug: evaluate library MarshalxIf-Debug-x86
externalNativeBuildDebug: building target library MarshalxIf because no targets are specified.
externalNativeBuildDebug: about to build C:\android-sdk\cmake\3.10.2.4988404\bin\cmake.exe --build C:\Users\
externalNativeBuildDebug: evaluate miniconfig
externalNativeBuildDebug: evaluate library MarshalxIf-Debug-x86_64
externalNativeBuildDebug: building target library MarshalxIf because no targets are specified.
externalNativeBuildDebug: about to build C:\android-sdk\cmake\3.10.2.4988404\bin\cmake.exe --build C:\Users\
(略)
BUILD SUCCESSFUL in 8s
34 actionable tasks: 5 executed, 29 up-to-date
AAPT2 aapt2-3.2.0-4818971-windows Daemon #0: shutdown
15:25:52: Task execution finished 'assembleDebug --info'.

まとめ

  • Android Gradle Plugin 3.1.2 では、CMake 7以上のバージョンを使用するビルドはプレビュー段階。
    • Android Gradle Plugin 3.1.2 では、CMake 3.6 を使用した方が良さそう。
  • "CMakeのバージョンを明記しないときには CMake 3.6を使用する"、という動作は、おそらくAndroid Gradle Plugin 3.3以上から。
    • Android Gradle Plugin 3.3未満では、新しいバージョンのCMakeを使用している。

こんなことよりも、いろいろなツールのバージョンの更新と検証をしましょう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?