Android Studio 
勉強会 
@sugoi_wada 12/7
自己紹介
@sugoi_wada 
• 和田 太陽(わだ ひかる) 
• つ部副部長です 
• 任期は今日まで!! 
• 写真・年賀状販売してます 
• Werckerサポートしてます
コミケ本
Android Studio 
• About Android Studio 
• Tips and Tricks 
• Notice 
• Build Variantsを覚えて懇親会に行こう
About 
Android Studio
• IntelliJ IDEAベースの新しいIDE 
• Android公式 
• Eclipse ADTより新しい機能がついて、改善されている 
• Gradleベースのビルドシステム 
• 様々なテンプレートのサポート 
• リッチなレイアウトエディタ 
• Lintツールで使いやすさ、バージョン対応などの問題を解決 
• proguard適用、署名可能 
• 複数のビルドタイプ・apk出力可能 
• 複数のモジュール(プロジェクト)対応 
• Google Cloud Servicesとの連携
Gradleベースの 
ビルドシステム
Gradle 
• Groovyというスクリプト言語で記述 
• 複数のapk出力・複数のアプリケーション(モジュール)管 
理ができる 
• 依存関係を管理できる 
• Android Studio 標準装備 
• 新規プロジェクト生成時に一式ダウンロードしてくる 
• ビルド操作などは、裏でGradleが走っている
様々なテンプレートの 
サポート
Revisions
• Android Studio v1.0 RC1 (November 2014) 
• Android Studio v0.8.14 (October 2014) 
• Android Studio v0.8.6 (August 2014) 
• Android Studio v0.8.0 (June 2014) 
• Android Studio v0.5.2 (May 2014) 
• Android Studio v0.4.6 (March 2014) 
• Android Studio v0.4.2 (Jan 2014) 
• Android Studio v0.3.2 (Oct 2013) 
• Android Studio v0.2.x (July 2013) 
• Android Studio v0.1.x (May 2013)
• Android Studio v1.0 RC1 (November 2014) 
• Android Studio v0.8.14 (October 2014) 
• Android Studio v0.8.6 (August 2014) 
• Android Studio v0.8.0 (June 2014) 
• Android Studio v0.5.2 (May 2014) 
• Android Studio v0.4.6 (March 2014) 
• Android Studio v0.4.2 (Jan 2014) 
• Android Studio v0.3.2 (Oct 2013) 
• Android Studio v0.2.x (July 2013) 
• Android Studio v0.1.x (May 2013) 
Beta 
Preview
Android Studio 
vs. 
Eclipse ADT
Migrating from 
Eclipse
https:// 
developer.android.com/ 
sdk/installing/migrate.html
画面の説明
Android SDK
AVD Manager
Sync Project with Gradle Files
Run & Debug
プロジェクト構成
appモジュール 
(アプリ本体)
SDK Managerでインストール済みのものを 
指定すること
これらは全て 
Project Stractureから 
設定できる 
※慣れた人は直接編集してOK
プロジェクトを右クリック 
→Open Module Settings
Notice
プラグインを使って 
便利機能を追加する
Android Studio 1.0よ 
りアイコンが変わった
APKファイルの場所
APKの生成方法 
Build > Generate Signed APK…から署名付きAPK 
を作成するか、生成したいモジュールをRunする
HelloWorld/app/ 
build/outputs/apk/ 
※ Android Studioからはこのディレクトリは見えない
Automatically Build 
できない
できません
Build > 
Rebuild Project
Gradleファイルを編集した 
らSyncしなければならない
Sync Project with Gradle Files
Gradleファイルをいじると出てくるこいつのここを押す
今まで正常に動いていたプロジェク 
トが、Android Studioをアップデー 
トしたらエラーを吐くようになった
よくあることです
最近は減りましたが 
Canary Channel 
だとあるかも
Channelを確認する 
• 設定画面へ 
• Android Studio > Preferences 
• File > Settings… 
• Updatesを確認
自分に適したものを選ぶ 
Stable Channel 
Beta Channel 
Dev Channel 
Canary Channel
Build Variants
Build Variant = Build Type + Product Flavor
Build Variant = Build Type + Product Flavor
Build Type 
• デバッグ用・デモ用・リリース用など 
• 用途に合わせたBuild Typeを設定できる 
• ビルド時の設定を分けるのに使うと良い 
• DebugとReleaseの2つがデフォルトで存在 
• 手元でビルドするDebugとStoreに出すRelease 
• 自由に増やすことができる 
• Releaseビルドは署名をすることを強制するようになってた
Build Type 
• こんな時に使う(知らない間に使っている) 
• デバッグ用はProguardかけたくないけど、リリース用 
にはかけたい 
• デバッグ用には署名いらないけど、リリース用には署名 
しなきゃリリースできないな 
• デバッグ用にはPackage名の語尾に.debugをつけたい 
• デバッグ用はGoogleAnalyticsに情報を送信したくない
Build Type 
Build 
Type Proguard Sign App suffix GA 
Debug FALSE DEBUG .debug FALSE 
Release TRUE OWN TRUE
Build Variant = Build Type + Product Flavor
Product Flavor 
• 用途に合わせて様々な味付けができる 
• 無料/有料アプリ 
• ステージング/プロダクション環境 
• API LEVELの異なる2種類のアプリ 
• を1つのプロジェクトで管理できる
Build Variant = Build Type + Product Flavor
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses Dev Store Dev Store 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
テスト用のアプリと、Storeアプリが両方入れられる 
Ad TRUE TRUE FALSE FALSE
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses Dev Store Dev Store 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
テスト用のアプリと、Storeアプリが両方入れられる 
FreeDebugビルド com.example.helloworld.debug.free 
FreeReleaseビルド com.example.helloworld.free 
ChargeReleaseAd ビTRUE ルド com.TRUE example.FALSE helloworld.FALSE 
debug 
ChargeReleaseビルド com.example.helloworld
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses Dev Store Dev Store 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
テスト用のアプリと、Storeアプリが両方入れられる 
未署名のアプリを入れたまま、Storeアプリを入れようとして 
エラー吐かれることがなくなる 
Ad TRUE TRUE FALSE FALSE
やってみよう
まずはDebugビルド 
特有の設定をする
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE
Flavor Free Charge 
Build 
DebugDebug ビRelease ルドのとDebug きは 
Type Release 
Uses 手元で 
アプリケーションIDの語尾に.debugをつける 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE
アプリケーションのgradle 
のビルドファイルを開く
app/build.gradle 
apply plugin: 'com.android.application' 
... 
android { 
... 
buildTypes { 
release { 
minifyEnabled false 
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules. 
pro' 
} 
} 
}
app/build.gradle 
apply plugin: 'com.android.application' 
... 
android { 
... 
buildTypes { 
debug { 
applicationIdSuffix ".debug" 
} 
release { 
minifyEnabled false 
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules. 
pro' 
} 
} 
}
Flavor Free Charge 
Build 
DebugDebug ビRelease ルドのとDebug きは 
Type Release 
アプリ名の語尾にDebugをつける 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE
app/srcの上で右クリック→New→Directory 
debug という名前のディレクトリを作成する
app/src/debugの上で右クリック 
→New→Directory 
res という名前のディレクトリを作成する 
app/src/debug/resの上で右クリック 
→New→Directory 
values という名前のディレクトリを作成する
app/src/main/res/values/strings.xml 
を 
app/src/debug/res/values/ 
にコピー
app/src/debug/res/ 
values/strings.xml 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
挿入 
<string name="app_name">HelloWorldDebug</string> 
<string name="hello_world">Hello world!</string> 
<string name="action_settings">Settings</string> 
</resources> 削除
DebugビルドとReleaseビ 
ルドの違いを確認してみる 
まずはDebugビルドを確認
②debugにする(なってる) 
①Build Variants
③実行
アプリ名がHelloWorldDebugになってる! 
(applicationIdはAndroid Studioからチェックできます)
②releaseにする 
①Build Variants 
③実行する
署名が無いので実行できない… 
(コマンドだとできるけど今回は省略) 
急遽、Releaseビルドには署名をしよう
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE
署名の準備 
• キーストアとキーが必要 
• Storeにアップデートする際には署名が必須 
• 本題から逸れるのでサクッと作ってしまいます
キーストアとキー作成 
• Buildメニュー→Generate Signed APK…
の内容を覚えておく 
OK押したら 
先へは進まず 
ウィンドウを 
閉じる 
Passwordは全て123456と打ってます 
本当は各項目きちんと入力してください
プロジェクトを右クリック 
→Open Module Settings
さっきの署名情報入力
署名完了! 
これでReleaseビルドが 
できる
アプリ名がHelloWorldになってる! 
(applicationIdはAndroid Studioからチェックできます)
applicationIdが異なるため、DebugとReleaseが共存している
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE
Flavor Free Charge 
Build 
Type FreeとDebug ChargeRelease のFlavorDebug を作成すRelease 
る 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE
プロジェクトを右クリック 
→Open Module Settings
Build Variantsを確認 
4種類に増えた!
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE 
FreeReleaseビルドのときは 
ApplicationIdの末尾に.freeをつける 
アプリ名の末尾にLightをつける
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
FreeReleaseビルドのときは 
Sign ApplicationIdFALSE のTRUE 末尾に.freeをFALSE つける 
TRUE
アプリケーションのgradle 
のビルドファイルを開く
app/build.gradle 
apply plugin: 'com.android.application' 
... 
android { 
... 
productFlavors { 
free { 
} 
charge { 
} 
} 
}
app/build.gradle 
apply plugin: 'com.android.application' 
... 
android { 
... 
productFlavors { 
defaultConfigのapplicationIdを参照 
free { 
applicationId "com.example.helloworld.free" 
} 
charge { 
} 
} 
} 
※ProductFlavorはapplicationIdSuffixで 
 末尾だけ設定できない
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
FreeReleaseビルドのときは 
Sign アFALSE プリ名の末尾にTRUE LightをつけFALSE る 
TRUE
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Debugのときってどうやったっけ…? 
Sign FALSE TRUE FALSE TRUE
app/src/debugの上で右クリック 
→New→Directory 
res という名前のディレクトリを作成する 
app/src/debug/resの上で右クリック 
→New→Directory 
values という名前のディレクトリを作成する
これや!
アプリ名の末尾を 
DebugからLightに変更 
Debugディレクトリごとコピーして、貼り付け 
名前をどうするか聞かれるので、freeとする
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE 確認TRUE してみる 
FALSE FALSE 
Sign FALSE TRUE FALSE TRUE
②freeReleaseにする 
①Build Variants 
③実行
アプリ名がHelloWorldFreeになってる! 
(applicationIdはAndroid Studioからチェックできます)
ここでひとつの疑問
FreeDebugビルドの場合はどうなるか? 
(やってみよう)
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.Freedebug のビルド時は.free 広告をつけ.る 
debug 
Chargeのビルド時は広告なしにする 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE
今日は本物の広告は 
使えないので…
Flavorごとにソースコードを 
書き分ける方法を伝授します 
(2パターン)
パターン1 
BuildConfigで書き分ける
BuildConfigとは?
app/build/generated/source/ 
buildConfig/…/buildConfig.java 
public final class BuildConfig { 
public static final boolean DEBUG = false; 
public static final String APPLICATION_ID = "com.example.helloworld.free"; 
public static final String BUILD_TYPE = "release"; 
public static final String FLAVOR = "free"; 
public static final int VERSION_CODE = 1; 
public static final String VERSION_NAME = "1.0"; 
/** 
* @deprecated Use {@link #APPLICATION_ID} 
*/ 
@Deprecated 
public static final String PACKAGE_NAME = "com.example.helloworld.free"; 
}
app/build/generated/source/ 
buildConfig/…/buildConfig.java 
public final class BuildConfig { 
public static final boolean DEBUG = false; 
public static final String APPLICATION_ID = "com.example.helloworld.free"; 
public static final String BUILD_TYPE = "release"; 
public static final String FLAVOR = "free"; 
public static final int VERSION_CODE = 1; 
public static final String VERSION_NAME = "1.0"; 
これで書き分ける 
/** 
* @deprecated Use {@link #APPLICATION_ID} 
*/ 
@Deprecated 
public static final String PACKAGE_NAME = "com.example.helloworld.free"; 
}
試しにテキストビューの 
文字を置き換えてみる
app/src/main/res/layout/ 
activity_main.xml 
idを付与
app/src/main/java/ 
com.xxx/MainActivity
chargeDebug freeDebug
パターン2 
クラスをごっそり書き分ける
app/srcの上で右クリック→New→Directory 
charge という名前のディレクトリを作成する
mainのjavaディレクトリを 
chargeとfreeディレクトリにコピペ
mainの中のMainActivityは削除
こうすると、Chargeビルド時はcharge内のファイル 
のみコンパイルしてクラス化する 
↑↓表示のされ方も違ってくる
Chargeの方のMainActivity
freeの方のMainActivity
chargeDebug freeDebug
Flavor Free Charge 
Build 
Type Debug Release Debug Release 
Uses 手元で 
デバッグ 
Store 
(無料) 
デバッグ・ 
営業 
Store 
(有料) 
App Id 
suffix .free.debug .free .debug 
App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯ 
Ad TRUE TRUE FALSE FALSE 
Sign FALSE TRUE FALSE TRUE

つ部 Android Studio 勉強会 12/7