Motivation
最近のAndroidアプリ開発だとライブラリを使うことが前提であることが多い。 毎回毎回プロジェクト立ち上げ後にライブラリを取り込んでいくのが非常に面倒なので、 テンプレートを弄ってみた。
プロジェクトのbuild.gradleファイルの場所
OSXだと/Applications/Android Studio.app/Contents/plugins/android/lib/templates/gradle-projects/NewAndroidProject/root/build.gradle.ftlと/Applications/Android Studio.app/Contents/plugins/android/lib/templates/gradle-projects/NewAndroidModule/root/build.gradle.ftlがそれに当たる。
Ubuntu等の環境であれば、ダウンロードしてきたAndroidStudioのディレクトリ以下で上記パスのplugin以降の所に居ると思われる。
Projectの方がプロジェクトルートのbuild.gradle、Moduleの方がapp/build.gradleのテンプレートファイルに当たる。
テンプレートファイルはFreeMaker Template Engine形式で書かれている。
今回は特に凝ったことをするつもりは無いので、上記の知識は必要ない。
ファイルを差し替える
ファイル自体を差し替えるのは癪なので、シンボリックリンクで差し替えを行った。
リンク先のファイルをhomeディレクトリ以下にすると、AndroidStudioがテンプレートファイルを探せなかった。
恐らくEI CapitanのSIPが影響しているのだと思う。(深追いはしていない)
上記問題があったので、プロジェクトディレクトリ下にカスタマイズしたファイルを作成した。
cd /Applications/Android\ Studio.app/Contents/plugins/android/lib/templates/gradle-projects mv NewAndroidProject/root/build.gradle.ftl NewAndroidProject/root/build.gradle.ftl.org cp NewAndroidProject/root/build.gradle.ftl.org NewAndroidProject/root/my.build.gradle.ftl ln -s NewAndroidProject/root/my.build.gradle.ftl NewAndroidProject/root/build.gradle.ftl mv NewAndroidModule/root/build.gradle.ftl NewAndroidModule/root/build.gradle.ftl.org cp NewAndroidModule/root/build.gradle.ftl.org NewAndroidModule/root/my.build.gradle.ftl ln -s NewAndroidModule/root/my.build.gradle.ftl NewAndroidModule/root/build.gradle.ftl
my.build.gradle.ftlに必要なモジュールを組み込む
今回は、retrolambdaとhugoを入れ込むことにした。
それぞれのライブラリをプロジェクトに組み込むときと同様にテンプレートファイルにも編集を加える。
diff --git a/NewAndroidProject/root/build.gradle.ftl.org b/NewAndroidProject/root/my.build.gradle
index e60d8c0..5cd3101 100644
--- a/NewAndroidProject/root/build.gradle.ftl.org
+++ b/NewAndroidProject/root/my.build.gradle
@@ -11,6 +11,8 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:${gradlePluginVersion}'
+ classpath 'me.tatarka:gradle-retrolambda:3.2.5'
+ classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/NewAndroidModule/root/build.gradle.ftl.org b/NewAndroidModule/root/my.build.gradle
index e59f426..3c1c6a3 100644
--- a/NewAndroidModule/root/build.gradle.ftl.org
+++ b/NewAndroidModule/root/my.build.gradle
@@ -17,6 +17,8 @@ buildscript {
apply plugin: 'com.android.library'
<#else>
apply plugin: 'com.android.application'
+apply plugin: 'me.tatarka.retrolambda'
+apply plugin: 'com.jakewharton.hugo'
</#if>
<#if !(perModuleRepositories??) || perModuleRepositories>
@@ -34,6 +36,11 @@ android {
compileSdkVersion <#if buildApiString?matches("^\\d+$")>${buildApiString}<#else>'${buildApiString}'</#if>
buildToolsVersion "${buildToolsVersion}"
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
defaultConfig {
<#if isLibraryProject?? && isLibraryProject>
<#else>
New Projectを試してみる
上記反映を行った上で、Android StudioからNew Projectを試してみる。 特に手を入れなくても、以下の様なコードが通るようになる。Happy :)
package com.kobashin.sample.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import hugo.weaving.DebugLog;
public class MainActivity extends AppCompatActivity {
@DebugLog
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt = new Button(this);
bt.setOnClickListener(v -> {
});
}
}