27
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android Studioでの開発を爆速化させるテンプレート作成術 〜テンプレートのしくみ〜

Last updated at Posted at 2016-02-20

はじめに

Android Studioを使ってAndroidアプリを開発する場合、プロジェクトごとに毎回毎回同じような設定やコードを書いていて無駄な時間を使っていると感じることはないでしょうか?

Templateを使うことで、こんな無駄な作業を省略することができます。

今回は、既存のTemplateの中身を見てTemplateのしくみを調べていきます。

Templateのしくみ

Templateの構成

Macの場合、下記ディレクトリにTemplateが配置されています。

 /Applications/Android Studio.app/Contents/plugins/android/lib/templates/

空のFragmentを作る下記Templateを参考に作成していきます。
/Applications/Android Studio.app/Contents/plugins/android/lib/templates/other/BlankFragment/

このBlankFragmentには、下記のファイルが入っています。

├── globals.xml.ftl
├── recipe.xml.ftl
├── root
│   ├── res
│   │   ├── layout
│   │   │   └── fragment_blank.xml.ftl
│   │   └── values
│   │       └── strings.xml
│   └── src
│       └── app_package
│           └── BlankFragment.java.ftl
├── template.xml
└── template_blank_fragment.png

template.xml

templateの大本になるファイルは、template.xmlです。
下記のようにtemplateの名前や説明、templateのカテゴリ、サムネイルの画像ファイル名を記述します。

template.xml
<template
    format="5"
    revision="3"
    name="Fragment (Blank)"
    description="Creates a blank fragment that is compatible back to API level 4."
    minApi="7"
    minBuildApi="8">

    <!-- この記述によりFragment (Blank)がFragmentのカテゴリに表示されるようになる -->
    <category value="Fragment" />
    
    ...
    
    <thumbs>
        <thumb>template_blank_fragment.png</thumb>
    </thumbs>
    
    <globals file="globals.xml.ftl" />
    <execute file="recipe.xml.ftl" />

</template>
    

##プロジェクトに配置するファイルの元ファイル

プロジェクトに配置されるファイルは、root/res/layout/fragment_blank.xml.ftl、root/res/layout/value/strings.xml、src/app_package/BlankFragment.java.ftlです。
この*.ftlファイル内には、下記のように変数が記述されており変数に値を埋め込むことでファイルの作成を行います。

BlankFragment.java.ftl
package ${packageName};

<#if includeCallbacks>import android.content.Context;</#if>
<#if includeCallbacks>import android.net.Uri;</#if>
import android.os.Bundle;
import android${SupportPackage}.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
<#if !includeLayout>import android.widget.TextView;</#if>
<#if applicationPackage??>
import ${applicationPackage}.R;
</#if>

...

public class ${className} extends Fragment {
   ...
}

この変数は、template.xmlで定義されています。
template.xmlで定義された変数は、Fragment作成時のウィザードで編集できるようになっています。

template.xml
    ...
    <parameter
        id="className"
        name="Fragment Name"
        type="string"
        constraints="class|nonempty|unique"
        default="BlankFragment"
        help="The name of the fragment class to create" />
    ...

例えば、Fragmentのクラス名のclassNameはこのように定義されていており、Fragment作成時のウィザードでは、下記のように入力を受け付けられるようになっています。

wizard

recipe.xml.ftlは、src/app_package/BlankFragment.java.ftl等の元になるファイルをプロジェクト内に配置するための記述を行うファイルです。

recipe.xml.ftl

recipe.xml.ftl
<?xml version="1.0"?>
<recipe>

    <#if useSupport><dependency mavenUrl="com.android.support:support-v4:${buildApi}.+"/></#if>
    <merge from="root/res/values/strings.xml" to="${escapeXmlAttribute(resOut)}/values/strings.xml" />

    <#if includeLayout>
        <instantiate from="root/res/layout/fragment_blank.xml.ftl"
                       to="${escapeXmlAttribute(resOut)}/layout/${escapeXmlAttribute(fragmentName)}.xml" />

        <open file="${escapeXmlAttribute(resOut)}/layout/${escapeXmlAttribute(fragmentName)}.xml" />
    </#if>

    <open file="${escapeXmlAttribute(srcOut)}/${className}.java" />

    <instantiate from="root/src/app_package/BlankFragment.java.ftl"
                   to="${escapeXmlAttribute(srcOut)}/${className}.java" />

</recipe>

このファイルでtemplateのディレクトリにある*.ftlファイルをプロジェクトのどの位置に配置するのかを記述しています。
プロジェクトの配置位置を示すsrcOutやresOutは、globals.xml.ftlに定義されています。
このファイル内に書いてあるキーワードは、それぞれ下記の意味になります。

| キーワード | 意味 |
|:-----------:|:------------|:
| dependency | build.gradleに追加する依存ライブラリ |
| instance | 新規にファイルを作成する |
| merge | ファイルをマージする(xmlとgradleのみに対応) |
| open | ファイル作成後、Android Studioでファイルを開く |

#まとめ
以上が、Android Studioのtemplateの大まかなしくみになります。
これらの要素を使用して毎回作成しているファイル郡をtemplateにしておくことで、作業時間の短縮が可能になります。

次回は、今回説明した要素を使ってみてAdsenseのバナーを画面下部に表示するFragmentを作成してみます。
Android Studioでの開発を爆速化させるテンプレート作成術 〜Adsenseのバナーを画面下部に表示するFragment〜

27
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?