Android Studio を入れずに Android 開発環境を構築する
モチベーション
Flutter や React Native を開発するには Android SDK が必要だが、 VS Code で開発するならわざわざ Android Studio をインストールしたくない. Androidのネイティブアプリケーションを開発する場合でも、IDE のエラーなのか Android のエラーなのか問題の切り分けが面倒なので最小構成で開発したい.
(あとは宗教上の理由で JetBrains 製品を極力使いたくない🙂)
幸い、Google がコマンドラインツールを提供しているのでそれを使って Android Studio に依存しない形で Android 開発環境を構築する.
Java を入れる
お好みの方法で. JDK 11 を推奨.
nix-shell を使う場合は以下のようにする.
let
pkgs = import <nixpkgs> { };
in pkgs.mkShell {
packages = [
pkgs.jdk11
android-tools
];
shellHook = ''
export JAVA_HOME=${pkgs.jdk11}
PATH="${pkgs.jdk11}/bin:$PATH"
'';
}
flake.nix を使う場合は以下のように. system = "aarch64-darwin"
は自分の使っているプラットフォームに置き換える.
{
description = "Flake to manage my Java workspace.";
inputs.nixpkgs.url = "nixpkgs/nixpkgs-unstable";
outputs = inputs:
let
system = "aarch64-darwin";
pkgs = inputs.nixpkgs.legacyPackages.${system};
in {
devShell.${system} = pkgs.mkShell rec {
name = "java-shell";
buildInputs = with pkgs; [
jdk11
android-tools
];
shellHook = ''
export JAVA_HOME=${pkgs.jdk11}
PATH="${pkgs.jdk11}/bin:$PATH"
'';
};
};
}
sdkmanager を入れる
Android SDK の各種モジュールを管理するために sdkmanager をインストールする.
curl -L https://dl.google.com/android/repository/commandlinetools-mac-8512546_latest.zip -o commandlinetools-mac-8512546_latest.zip
unzip commandlinetools-mac-8512546_latest.zip
$HOME に以下の構成になるように展開結果を配置する.
$HOME
└── android
└── cmdline-tools
└── tools
├── NOTICE.txt
├── bin
├── lib
└── source.properties
$HOME/android/cmdline-tools/tools/bin
に PATH を通す. bin 以下には sdkmanager や avdmanager がある.
動作確認
sdkmanager --version
必要なモジュールをインストールする
以下のコマンドで必要なモジュールをインストールする. モジュール一覧は sdkmanager --list
で表示されるので必要なものをそこから探す.
sdkmanager --install platform-tools
sdkmanager --install emulator
インストールしたモジュールはそれぞれ $HOME/android/platform-tools
, $HOME/android/emulator
に保存される.
各 android バージョン向けのモジュールを追加する.
sdkmanager --install "build-tools;30.0.3"
sdkmanager --install "build-tools;30.0.3" "platforms;android-30"
エミュレーターを作成する
エミュレーターを作成するにはシステムイメージが必要なので先にインストールする. これも sdkmanager --list
の結果から検索できる. 以前は M1 Mac でエミュレーターの作成にワークアラウンドが必要だったが2022/10月時点では特に必要ない.
sdkmanager --install "system-images;android-30;default;arm64-v8a"
エミュレーターを作成する. ここで --device
を指定しないとうまくエミュレーターが起動しない.
avdmanager create avd --name android30 --device "pixel" --package "system-images;android-30;default;arm64-v8a"
Firebase Messaging など、Google の API に依存した機能を試す場合は system-images;android-30;google_apis_playstore;arm64-v8a
のように google_apis_playstore
の suffix がついたものを利用しよう.
avd に関係するリソースは ~/.android/avd
以下に保存される.
emulator を起動する. $HOME/android/emulator/emulator
コマンドを使う. emulator30
は自分が emulator を作成した時に指定した名前にする.
emulator -avd android30
キーボードの設定
Android emulator はデフォルトではタッチ操作モードになっていて、システムのキーボードからの入力を受けつけない.
キーボードから入力できるようにするには ~/.android/avd
以下にある android30.avd/config.ini
で以下のように設定する.
- hw.keyboard = no
+ hw.keyboard = yes
dns の設定
android エミュレーターからネットワークに接続するために dns に 8.8.8.8
を追加する.
OSX であれば system preferences > network > advanced > dns > 8.8.8.8 を追加する.
動作確認
emulator -avd android30
Flutter であれば以下のコマンドでアプリケーションの動作確認をできる.
flutter devices
flutter run -d <flutter devices で確認した emulator の名前>
もし、flutter devices
コマンドで emulator が見つからない時は、環境変数 ANDROID_SDK_ROOT=$HOME/android
が指定されているか確認する.
もし、エミュレーター起動時に adb が見つからないと怒られた場合は platform-tools 以下にあるadb
で次のコマンドを実行する.
adb kill-server
adb start-server
Discussion