🙆‍♀️

AndroidStudio テンプレート機能のチーム共有方法&スクリプト化

に公開

結論

  • AndroidStudioのデフォルト機能にコードテンプレート機能が存在する
  • それをチーム共有できるようにした
  • 更にそれをスクリプトにして自動化した

やったこと

AndroidStudioのデフォルト機能でコードテンプレート機能というものがあります
https://qiita.com/collapsar/items/75daee0c6e08237d4d59#file-and-code-templates

しかしこれをチームで共有する方法がデフォルト機能では存在せず、

取り回しが悪かったのでこれを改善してみました。

手動更新方法

  • プロジェクトルート配下にandroidstudio-template/fileTemplatesフォルダを作成し、この配下にテンプレートファイルを作成する
  • こんな感じ
ComposeNavigation.kt
@Serializable
internal object ${UpperRouteNAME}Route

internal fun NavController.navigateTo${UpperRouteNAME}(
    routeData: ${UpperRouteNAME}Route,
    navOptions: NavOptionsBuilder.() -> Unit = {},
) {
    navigate(route = routeData) {
        launchSingleTop = true
        navOptions()
    }
}

internal fun NavGraphBuilder.${LowerRouteNAME}Navigation(
    nextRouteAction: () -> Unit,
    onBackAction: () -> Unit,
) {
    composable<${UpperRouteNAME}Route> {

    }
}

private fun NavBackStackEntry.getSafeArgs(): ${UpperRouteNAME}Route {
    return this.toRoute<${UpperRouteNAME}Route>()
}
  1. open "$HOME/Library/Application Support/Google" を叩いてGoogleフォルダを開く
  2. AndroidStudio0000.0の形式のフォルダがあるので自分の使っているAndroidStudioのバージョンに一致したフォルダを開く(2024.2.1のものであればAndroidStudio2024.2という感じ)
  3. その中にfileTemplatesというフォルダが存在する場合、androidstudio-template/fileTemplatesの中身をコピー
  4. その中にfileTemplatesというフォルダが存在しない場合、androidstudio-template/fileTemplatesAndroidStudio0000.0の中にコピー
  5. AndroidStudioをリスタートすることで設定が反映されます


しかし手動で更新するのもめんどうだなと思ってこれをスクリプト化してみました。

スクリプトコード

#!/bin/bash

# -----------------------------------------------
# Android Studio テンプレート自動更新スクリプト
#
# このスクリプトは以下の処理を行います:
#
# 1. /Applications/Android Studio.app からインストールされている
#    Android Studio のバージョンを自動で取得
#
# 2. $HOME/Library/Application Support/Google/AndroidStudio<version>/fileTemplates
#    を検出・作成(存在しない場合は作成)
#
# 3. androidstudio-template/fileTemplates にあるテンプレートファイルを
#    1 つずつコピー
#    ・既存の同名ファイルは上書き
#    ・それ以外のテンプレートは残す(共存)
#
# 4. Android Studio を終了(再起動は手動)
# -----------------------------------------------

set -e

# Android Studio のバージョンを取得
APP_PATH="/Applications/Android Studio.app"
INFO_PLIST="$APP_PATH/Contents/Info.plist"
VERSION=$(defaults read "$INFO_PLIST" CFBundleShortVersionString | awk -F. '{print $1 "." $2}')

if [[ -z "$VERSION" ]]; then
  echo "Android Studio のバージョンを取得できませんでした。"
  exit 1
fi

# パス設定
TARGET_DIR="$HOME/Library/Application Support/Google/AndroidStudio$VERSION"
TEMPLATE_SRC="androidstudio-template/fileTemplates"
TEMPLATE_DEST="$TARGET_DIR/fileTemplates"

# テンプレートフォルダ作成
mkdir -p "$TEMPLATE_DEST"

echo "テンプレートを $TEMPLATE_DEST にコピー中..."

# テンプレートを1つずつ処理(同名は上書き、他は残す)
for src_file in "$TEMPLATE_SRC"/*; do
  filename=$(basename "$src_file")
  dest_file="$TEMPLATE_DEST/$filename"

  if [ -f "$dest_file" ]; then
    echo "上書き: $filename"
  else
    echo "新規追加: $filename"
  fi

  cp "$src_file" "$dest_file"
done

# Android Studio を優しく終了(保存プロンプトが出る可能性あり)
echo ""
echo "Android Studio を終了します(保存ダイアログが出る場合があります)..."
osascript -e 'tell application "Android Studio" to quit'
sleep 2

echo "テンプレートが反映されました!Android Studio を手動で起動してください。"

まとめ

FlutterだとMakefileなどでスクリプト運用してる認識でしたが

Androidネイティブだとあんまり聞いたことがなかったので今回まとめてみました。

これをベースに運用することができれば便利かなーと思いますので

よければ活用してみてください👍

参考記事

https://qiita.com/collapsar/items/75daee0c6e08237d4d59#file-and-code-templates

Discussion