つ部 Android Studio 勉強会 12/7
-
Upload
hikaru-wada -
Category
Software
-
view
2.528 -
download
2
description
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