つ部 Android Studio 勉強会 12/7

Post on 09-Jul-2015

2.528 views 2 download

description

12/7に行われたつ部Android Studio勉強会の資料です。口語で説明しているスライドはあまり説明がありません。

Transcript of つ部 Android Studio 勉強会 12/7

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 Manager

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 ◯◯

Ad TRUE TRUE FALSE FALSE

テスト用のアプリと、Storeアプリが両方入れられる

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 ◯◯

Ad TRUE TRUE FALSE FALSE

テスト用のアプリと、Storeアプリが両方入れられる

FreeDebugビルド com.example.helloworld.debug.free FreeReleaseビルド com.example.helloworld.free ChargeReleaseビルド com.example.helloworld.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 ◯◯

Ad TRUE TRUE FALSE FALSE

テスト用のアプリと、Storeアプリが両方入れられる

未署名のアプリを入れたまま、Storeアプリを入れようとしてエラー吐かれることがなくなる

やってみよう

まずは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 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ビルドのときは アプリケーションIDの語尾に.debugをつける

アプリケーションのgradleのビルドファイルを開く

app/build.gradleapply plugin: 'com.android.application' ... android { ... buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }

app/build.gradleapply plugin: 'com.android.application' ... android { ... buildTypes { debug { applicationIdSuffix ".debug" } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }

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ビルドのときは アプリ名の語尾にDebugをつける

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ビルドを確認

①Build Variants

②debugにする(なってる)

③実行

アプリ名がHelloWorldDebugになってる! (applicationIdはAndroid Studioからチェックできます)

①Build Variants

②releaseにする

③実行する

署名が無いので実行できない… (コマンドだとできるけど今回は省略)

急遽、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…

Passwordは全て123456と打ってます 本当は各項目きちんと入力してください

の内容を覚えておく

OK押したら 先へは進まず ウィンドウを 閉じる

プロジェクトを右クリック→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 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

FreeとChargeのFlavorを作成する

プロジェクトを右クリック→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

Sign FALSE TRUE FALSE TRUEFreeReleaseビルドのときは ApplicationIdの末尾に.freeをつける

アプリケーションのgradleのビルドファイルを開く

app/build.gradle

apply plugin: 'com.android.application' ... android { ... productFlavors { free { } charge { } } }

app/build.gradleapply plugin: 'com.android.application' ... android { ... productFlavors { free { applicationId "com.example.helloworld.free" } charge { } } }

defaultConfigのapplicationIdを参照

※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

Sign FALSE TRUE FALSE TRUEFreeReleaseビルドのときは アプリ名の末尾に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

Sign FALSE TRUE FALSE TRUEDebugのときってどうやったっけ…?

app/src/debugの上で右クリック→New→Directory res という名前のディレクトリを作成する

app/src/debug/resの上で右クリック→New→Directory values という名前のディレクトリを作成する

これや!

Debugディレクトリごとコピーして、貼り付け 名前をどうするか聞かれるので、freeとする

アプリ名の末尾を Debugから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

Sign FALSE TRUE FALSE TRUE

確認してみる

①Build Variants

②freeReleaseにする

③実行

アプリ名が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.debug .free .debug

App name ◯◯Debug ◯◯Light ◯◯Debug ◯◯

Ad TRUE TRUE FALSE FALSE

Sign FALSE TRUE FALSE TRUE

Freeのビルド時は広告をつける Chargeのビルド時は広告なしにする

今日は本物の広告は 使えないので…

Flavorごとにソースコードを書き分ける方法を伝授します

(2パターン)

パターン1 BuildConfigで書き分ける

BuildConfigとは?

app/build/generated/source/buildConfig/…/buildConfig.javapublic 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.javapublic 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

freeDebugchargeDebug

パターン2 クラスをごっそり書き分ける

app/srcの上で右クリック→New→Directory charge という名前のディレクトリを作成する

mainのjavaディレクトリを chargeとfreeディレクトリにコピペ

mainの中のMainActivityは削除

こうすると、Chargeビルド時はcharge内のファイルのみコンパイルしてクラス化する

↑↓表示のされ方も違ってくる

Chargeの方のMainActivity

freeの方のMainActivity

freeDebugchargeDebug

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