AndroidStudioはじめました
~Gradleについて~
2014/04/16
tyabata
• 矢端智光 Tomomitsu Yabata
• 仕事と趣味とかでAndroid触ってます
最近
AndroidStudio
で開発してます
ビルドは
Gradleになりました
Gradle?
Gradleとは
• Groovyで書けるビルドシステム
• プログラミングするように書けるのでビルド手順など
が、柔軟にカスタマイズできる
• Maevenとの互換性ある
• 参考

http://gradle.monochromeroad.com/docs/userguide/
overview.html
buildファイルで
比較してみた
Ant

(build.xml)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- WARNING: Eclipse auto-generated file.
Any modifications will be overwritten.
To include a user specific buildfile here, simply create one in the same
directory with the processing instruction <?eclipse.ant.import?>
as the first entry and export the buildfile again. -->
<project basedir="." default="build" name="TomoTest">
<property environment="env"/>
<property name="ECLIPSE_HOME" value="../../../../../Applications/eclipse"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.6"/>
<property name="source" value="1.6"/>
<path id="Android 4.4.2.libraryclasspath">
<pathelement location="../../android_sdk/platforms/android-19/android.jar"/>
</path>
<path id="Android Private Libraries.libraryclasspath">
<pathelement location="libs/android-support-v4.jar"/>
</path>
<path id="Android Dependencies.libraryclasspath"/>
<path id="TomoTest.classpath">
<pathelement location="bin"/>
<path refid="Android 4.4.2.libraryclasspath"/>
<path refid="Android Private Libraries.libraryclasspath"/>
<path refid="Android Dependencies.libraryclasspath"/>
</path>
<path id="run.MainController.classpath">
<path refid="Android 4.4.2.libraryclasspath"/>
<path refid="TomoTest.classpath"/>
</path>
<path id="run.MainController.bootclasspath"/>
<target name="init">
<mkdir dir="bin"/>
<copy includeemptydirs="false" todir="bin">
<fileset dir="src">
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy includeemptydirs="false" todir="bin">
<fileset dir="gen">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="bin"/>
</target>
<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
<src path="src"/>
<src path="gen"/>
以下省略
Maeven

(pom.xml)

参考URLは後記
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/
XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-
v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>sample</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Gradle

(build.gradle)
apply plugin: 'android'
!
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
!
defaultConfig {
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
!
dependencies {
!
compile "com.android.support:support-v4:19.0.+"
}
見やすい!
見やすい!
(個人的)
AndroidStudio + Gradle
でできること1
用途別build
リリースorデバッグ

+

独自定義したbuildタイプ

(flavor)
例
android {
∼省略∼
productFlavors {
!
normal { // 無料版build
}
payment { // 有料版build

}

}
!
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'

~省略~

}
normal {
}
payment {
}
}
}
flavor毎に
パッケージ名変更
簡単です
android {
∼省略∼
productFlavors {
!
normal { // 無料版build
packageName "jp.tyabata.normal"
}
payment { // 有料版build
packageName "jp.tyabata.payment"

}

}
!
}
特定のflavorだけ
参照したいクラスやリソース
flavor毎に
フォルダ分けれます
Manifestファイル
合体できます
基本の

AndroidManifest
normal用
AndroidManifest
payment用
AndroidManifest
+ +
通常の

AndroidManifest
normal用
AndroidManifest
通常の

AndroidManifest
payment用
AndroidManifest
Normalの
Manifestファイル
paymentの
Manifestファイル
余談
• 同パッケージの同クラスの場合

main(ベースになる部分) + flavor毎に配置すると

duplicateで怒られますが



flavor毎だけに同パッケージの同クラスを置くと

ちゃっかりビルドできます



(赤くはなるので推奨ではなさそう)
基本はmain

+

差分はflavorへ
ボタン一つで
切り替わる
AndroidStudio + Gradle
でできること2
外部ライブラリの
組み込み
• git cloneして
• プロジェクトを参照
すればいい?
Yes!・・・でも
Gradleで書くと
repositories {
mavenCentral()
}
!
dependencies {
!
compile 'jp.tyabata:normal:1.0.+'
}
repositories {
mavenCentral()
}
!
dependencies {
!
compile group: 'jp.tyabata', name: 'normal', version: '1.0.+'
}
または
補足
1.0.+とした場合、
Maevenリポジトリから
1.0以上の最新版を
探して取得する
リモートMaevenリポジトリ

又は
リモートlvyリポジトリにあるソースを
build.gradleに記述するだけで
取りこんでくれる
Gitリポジトリは?
できないです・・・が
Gradle用の
Gitプラグインあるみたい
(編集時点開発中だと思われます)
https://github.com/ajoberstar/
gradle-git

Groovy(java)で
書けるので
夢も拡張もあるんだよ
作れる
参考
• Gradle Documetation

http://www.gradle.org/documentation
• Gradleユーザーガイド(非公式)

http://gradle.monochromeroad.com/docs/
userguide/userguide.html
• Maven入門 2-4 pom.xmlについて

http://www.techscore.com/tech/Java/
ApacheJakarta/Maven/2-2/#maven-2-4
サンプルはこちら
https://github.com/tyabata/demo-tomo
author tyabata
“Thank you for your attention.”

AndroidStudioはじめました ~Gradle編~