🥰

Android Studio を入れずに Android 開発環境を構築する

2022/11/03に公開

モチベーション

Flutter や React Native を開発するには Android SDK が必要だが、 VS Code で開発するならわざわざ Android Studio をインストールしたくない. Androidのネイティブアプリケーションを開発する場合でも、IDE のエラーなのか Android のエラーなのか問題の切り分けが面倒なので最小構成で開発したい.

(あとは宗教上の理由で JetBrains 製品を極力使いたくない🙂)

幸い、Google がコマンドラインツールを提供しているのでそれを使って Android Studio に依存しない形で Android 開発環境を構築する.

Java を入れる

お好みの方法で. JDK 11 を推奨.

nix-shell を使う場合は以下のようにする.

shell.nix
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" は自分の使っているプラットフォームに置き換える.

flake.nix
{ 
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