はじめに
現在参画中のプロジェクトでシステムの保守開発をしています。
その中で、スマホ向け新機能のフロントエンド実装を担当することになりました。
Android Studio をインストールし、エミュレーターで動作確認をしながら開発を進めようとしたのですが……さっそくエラーに阻まれ、なかなか前に進めません。
ネット検索をしたり、同僚の方々に助言をいただきながら試行錯誤しましたが、結論として根本的な解決には至りませんでした。
それでも多くの学びがあったので、備忘録として整理しました。
どなたかの参考になれば幸いです。
前提条件
PC の環境および使用したしたソフトウェアのバージョンは次のとおり。
※自社環境ではなく、顧客先環境
カテゴリ | バージョン |
---|---|
OS | Windows 11 |
OpenJDK | 21 |
Gradle | 8.12.1 |
Android Studio | 2025.1.3.7 exe版(記事作成時点の最新版) |
Android SDK Command-Line Tools | commandlinetools-win-13114758_latest.zip |
SDK Platform-Tools | 36.0.0 |
Android Emulator | 36.2.9.0 |
発生状況・エラー内容
いきなりエラーが出ましたが、とりあえず進めます。
まずはエミュレータが起動できるかを確認すべく、Welcome 画面で [More Actions] をクリックして [Virtual Device Manager] を開こうとしたものの、ボタンが非活性化されており選択できず。
※本来であれば、[Virtual Device Manager] をクリックするとこの画面が出てくるはず。
それならば、[New Project] で AVD の作成から始めようとしましたが、今度は SDK 未設定で以下の警告が表示されました。
では、SDK を設定しよう!
ネットに沢山転がっている設定手順の Android SDK の画面と何かが違う…
[SDK Platforms] [SDK Tools] [SDK Update Sites] になにも表示されません。
とりあえず進めよう。[Android SDL Location] の [Edit] をクリックし、Android SDK の設定画面で指定されるフォルダがセットされた状態で [Next] ボタンをクリック。
空のフォルダを用意しておくのはどうか。
C:\Users\<ユーザ名>\AppData\Local\Android\Sdk
[Next] ボタンをクリックとまたしても同じエラー。
エミュレーターのフォルダを用意しても、エミュレーターをダウンロードして配置しても変わりませんでした。
なぜですか!!😢
試したこと
1. 手動で各パッケージをインストール
Android SDK コマンドラインツール、SDK プラットフォームツールをダウンロード。
zip を解凍してフォルダに配置。
ユーザ環境変数 PATH に cmdline-tools と platform-tools を追加。
C:\Users\<ユーザ名>\AppData\Local\Android\Sdk\cmdline-tools\latest\bin
C:\Users\<ユーザ名>\AppData\Local\Android\Sdk\platform-tools
コマンドプロンプトで以下2つのコマンドを実行し、PATH が正しく通っているかを確認します。
まずはadbのバージョン。
adb --version
ですが、sdkmanagerのバージョンは…
sdkmanager --version
ちなみに、以下を実行すると
java --version
Javaのバージョンは確かに21であるにもかかわらず、17以上を要求されている!?
2. Windows のユーザ環境変数に Open JDK のパスを追加
Android Studio が別の JDK を参照しているのかも。環境変数を新規作成。
キー | 値 |
---|---|
JAVA_HOME | Open JDKのパス |
コマンドプロンプトで sdkmanager のバージョンを確認するも、またもやJava version 17 or higher is required.
のエラーが発生。
3. Gradle JDK の設定変更
Gradle JDK が古いのかも。
⚙ > [Settings] > [Appearance & Behavior] > [Build, Execution, Deployment] > [Build Tools] > [Gradle] > [Default Gradle JDK] をインストール済みのものに変更。
再びコマンドプロンプトで sdkmanager のバージョンを確認するも、エラーは変わらず。
4. 社内ネットワークのプロキシ設定を変更
“プロキシ環境下では SDK を取りに行けない”という記事を発見。
⚙ > [Settings] > [Appearance & Behavior] > [System Settings] > [HTTP Proxy] > [Manual proxy configuration] でプロキシを設定してみます。
試しに [Check Connection] にhttps://developer.android.com
をセットして接続確認したところ、503エラー。
[No Proxy] にしても変わらず…
分かったこと・解決できたエラー
エラー:Java version 17 or higher is required. について
1. 原因
ダウンロードした codline-tools の中にある sdkmanager.bat をメモ帳で開いてみました。
74行目の分岐に引っかかっているためにエラーが出ていたようです。
if !version! lss 170 if "%SKIP_JDK_VERSION_CHECK%" == "" (
echo Java version 17 or higher is required.
echo To override this check set SKIP_JDK_VERSION_CHECK
goto :eof
)
Javaのバージョンの計算方法はそのすぐ上に記述されています。
@rem check whether we have the right version of java
setlocal enabledelayedexpansion
for /f "tokens=3" %%a in ( '""%JAVA_EXE%" -version 2>&1 |findstr "version""' ) do (
for /f "tokens=1,2 delims=." %%b in ( 'echo %%a' ) do (
set versionWithQ=%%b%%c
)
)
set version=!versionWithQ:"=!
どういうことかというと、例えば、バージョンの表記が 21.0.8
の場合、最終的に version=210
となります。
また、最後の set version=!versionWithQ:"=!
でダブルクオーテーションは削除されるため、バージョンの表記が "21"
の場合は最終的に version=21
となります。
バージョンの表記
Oracle JDK:x.x.x
Open JDK:"x"
つまり、
-
Oracle JDK
21.0.8 → version=210
⇒if !version! lss 170
をパスできる -
Open JDK
"21" → version=21
⇒ 170 より小さい と判定されてしまう
その結果、Open JDK だと本来条件を満たしているのにエラーが出てしまっていたようです。
2. 解決方法
74行目を以下のとおりに修正するだけです。
if !version! lss 17 if "%SKIP_JDK_VERSION_CHECK%" == "" (
簡単ですね…
ちなみに、この時点でもう一度 SDK の設定を試みますが、うまくいきませんでした。
ただ、エミュレーターに関する警告は消えています。
プロキシの問題
Java バージョンのエラーを解決したので、次は怪しいプロキシ周りを確認しました。
顧客先環境では SDK のインストールにプロキシ経由でのアクセスが必要です。
Android Studioでの設定は不発に終わりましたが、今度はコマンドプロンプトのほうでプロキシの設定をしてみました。
インストール済みで利用可能なパッケージのリストを表示するsdkmanager のコマンドに直接プロキシを指定するオプションを付けてみます。
sdkmanager --list --proxy=http --proxy_host=[ユーザ名]:[パスワード]@[IPアドレス] --proxy_port=[ポート番号]
はい、やはりエラーです。
21
Warning: Failed to resolve host [ユーザ名]:[パスワード]@[IPアドレス]
Failed to create settings
おそらくこういうこと。
- SDK の配布は GitHub 上で行われている。
⇒ 認証必須環境ではダウンロード不可 -
--proxy_host
と--proxy_port
は指定可能だが、ユーザ認証は引数でサポートされていない。
さらに、Android Studio 経由の HTTPS リクエストも User-Agent の影響でプロキシから 503 が返却される可能性があります。
結論
いくつかのエラーは解決できたものの、顧客先の社内ネットワークの認証プロキシに引っかかってしまい、結局 SDK のインストールは断念しました。
sdkmanager 自体がユーザ認証付きプロキシをサポートしていないため、突破は難しそうです。
一方、自社環境のPCでは何の問題もなく エミュレーターがすいすい起動。
あっけないくらいでした。
今回の調査・対応にあたっては、ご協力いただいた先輩方に大変感謝しています。
自己開発の際には積極的に活用したいと思います!