読者です 読者をやめる 読者になる 読者になる

tomoima525's blog

Androidとか技術とかその他気になったことを書いているブログ。世界の秘密はカレーの中にある!サンフランシスコから発信中。

Android Best Practices のディレクトリ構成を作れるテンプレート作った

android 開発

Android Studioでプロジェクトを新規で作る時、テンプレートは何を選択していますか?

テンプレートには自動でNavigation Drawerを生成してくれるものや、最近だと広告をつけてくれるものなど色々ありますが、実際のところ、Add No Activityを選択するか、Blank Activityを選択する人が多いのではないのでしょうか。

テンプレートはプロジェクト作る時に必ず通るのですが、正直あまりイケてると思えないので、今回もうちょっとましなテンプレートを作ってみました。

Android Studioの標準テンプレートの問題点

Android Studioの標準テンプレートの問題点としては、以下があると思います。

  • 余計なリソースファイルやコードが自動で生成されてしまう
    →例えば、Blank Activityだと、activityごとのmenu(menuリソース + onCreateOptionMenuメソッド等)が毎回生成されてしまいます。まあ、正直、毎回消しますよね。
  • 結局いつものディレクトリ構成を一から構成しなくてはいけない
    -> 標準テンプレートでは最低限のものしか作らないので、例えばパッケージ直下にActivity作ってきたりします。まあ、100%ディレクトリ移動しますよね。
  • どこでも必要な機能がない
    -> 例えば、Applicationクラスはよっぽどシンプルなアプリでもあるものですが、生成されません。

要は使い勝手があまりよろしくない、といえるかと思います。少なくとも自分は困ってました。

Project Templateという解決策

というわけで、なんとかもっと効率的にアプリを作れないかと思っていたところ、Qiitaで @kgymshin さんのナイスな記事を見つけました。

【Android】もっと先へ「加速」したくはないか、少年 〜Project Template編〜

詳細は上記記事をストックして読んでいただければよいのですが、要はテンプレートは自前で作ることが出来るということです。
そこで、自前で作ってみました。

設計思想

自前で作るにあたって、配慮したのはなるべく標準的な構成にする必要最低限のテンプレートとするということです。

Android Best Practices

標準的な構成とするにあたっては、Android Best Practices というAndroid 開発のベストプラクティスに記載されているディレクトリ構成を意識しました。それに加えて、モデル階層下でデータを扱うようにするため、最終的に以下のようにディレクトリ構成を作りました。

com.myproject.myapp
├─ network
├─ models
|  ├─ prefs
|  ├─ apis
|  └─ provider
├─ utils
├─ activity
├─ fragments
├─ services
├─ views
└─ Application.java 

必要最低限のテンプレートとする

必要最低限、自分が必ず書く部分のみ生成するようにしています。具体的には

  • Activityについては、onCreateのみを生成 (新しいActivityを作る場合も適用されます)
  • FragmentについてはBaseFragmentを生成し、必ず使うメソッドのみ記述
  • Application.javaはSingletonを適用し、またタブレット時の自動回転の設定を記述

などの実装をしています。

使い方

このテンプレートは3ステップで利用可能です。 1.https://github.com/tomoima525/AndroidBestPracticesTemplateからcloneする

clone先はtemplateが置かれているディレクトリとなります。Macですと/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activitiesとなります。

$ git clone git@github.com:tomoima525/AndroidBestPracticesTemplate.git

2.Android Studioを再起動します。起動したら、File -> New Project...から新規プロジェクトを作ります。

f:id:tomoima525:20150718234054p:plain:w400

3. テンプレートからAndroid Best Practices Templateを選びます。

f:id:tomoima525:20150718233940p:plain:w400

そうすると以下のような構成が自動生成されます。

f:id:tomoima525:20150718233918p:plain:w400

作ってみた感想 + まとめ

テンプレートは意外と簡単につくれましたが、recipe.xml.ftlの記述を誤ると、パッケージ配下のファイル全部生成されない等、設定が結構シビアなのが大変でした。
もっと良い構成があるとか、この機能はあったほうが良い、とかあれば、PRいただけると幸いです。