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...
から新規プロジェクトを作ります。
3. テンプレートからAndroid Best Practices Template
を選びます。
そうすると以下のような構成が自動生成されます。
作ってみた感想 + まとめ
テンプレートは意外と簡単につくれましたが、recipe.xml.ftlの記述を誤ると、パッケージ配下のファイル全部生成されない等、設定が結構シビアなのが大変でした。
もっと良い構成があるとか、この機能はあったほうが良い、とかあれば、PRいただけると幸いです。