android studioの魅力

79
C-LIS CO., LTD. Twitter : #abc2015s

Upload: keiji-ariyama

Post on 14-Aug-2015

8.936 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Android Studioの魅力

C-LIS CO., LTD.

Twitter : #abc2015s

Page 2: Android Studioの魅力

自己紹介

2

大阪市のソフトウェア開発会社

"有限会社シーリス"の代表。

Androidアプリケーションの受託開発や、

Androidに関するコンサルティング業務の傍ら、

技術系月刊誌への記事執筆。

また、AOSP(Android Open Source Project)へ

コントリビュートをしています。

Page 3: Android Studioの魅力

Android Studio とは

3

2013年5月

IntelliJ IDEAベース

単体ソフトとして配布

Page 4: Android Studioの魅力

Android Developer Tools

4

2007年11月

Eclipseプラグイン

後に単体ソフトとして配布

Page 5: Android Studioの魅力

Google I/O 2013

撮影: Shoya Tsukada5

Page 6: Android Studioの魅力

本を執筆することに

2014年11月21日発売

技術評論社刊

Android Studio 0.8.6http://amzn.to/1HYRp32

6

Page 7: Android Studioの魅力

Android Studioの変遷 ~ 1.0

7

2013/05 : I/O Preview 2013/07 : 0.2.0 2013/09/16 : 0.2.9 2013/09/24 : 0.2.10 2013/10/18 : 0.3 2013/12/18 : 0.4 2014/03/06 : 0.5 2014/06/06 : 0.6 2014/06/27 : BETA

2014/07/13 : 0.8.2 2014/10/29 : 0.8.14 2014/10/31 : 0.9 2014/11/20 : RC1 2014/12/08 : 1.0 Release

Page 8: Android Studioの魅力

8

Page 9: Android Studioの魅力

9

Page 10: Android Studioの魅力

10

Page 11: Android Studioの魅力

11

http://blog.keiji.io/2014/12/c87.html

Page 12: Android Studioの魅力

12

いろいろあって…

Page 13: Android Studioの魅力

13

Page 14: Android Studioの魅力

14

どうしてこうなった

Page 15: Android Studioの魅力

http://techbooster.github.io/c88/

Copyright TechBooster

Page 16: Android Studioの魅力

自己紹介

16

2015年 後半の目標

@keiji_ariyama

まじめになる

Page 17: Android Studioの魅力

Android Studioの変遷 1.0 ~

17

2014/12/08 : 1.0 Release 2015/01/15 : 1.1 Preview 1 2015/01/29 : 1.1 Beta 2015/02/11 : 1.1 RC1 2015/02/18 : 1.1 Release 2015/03/09 : 1.2 Preview 1 2015/04/02 : 1.2 Beta 2015/04/21 : 1.2 RC1 2015/04/30 : 1.2 Release

2015/05/30 : 1.3 Preview 1 2015/06/10 : 1.2.2 Release 2015/06/19 : 1.3 Beta 2015/07/17 : 1.3 RC3

Page 18: Android Studioの魅力

2014/12/08 : 1.0 Release 2015/01/15 : 1.1 Preview 1 2015/01/29 : 1.1 Beta 2015/02/11 : 1.1 RC1 2015/02/18 : 1.1 Release 2015/03/09 : 1.2 Preview 1 2015/04/02 : 1.2 Beta 2015/04/21 : 1.2 RC1 2015/04/30 : 1.2 Release

2015/05/30 : 1.3 Preview 1 2015/06/10 : 1.2.2 Release 2015/06/19 : 1.3 Beta 2015/07/17 : 1.3 RC3

Android Studio 1.3 RC3

Page 19: Android Studioの魅力

ADT

http://android-developers.blogspot.jp/2015/06/an-update-on-eclipse-android-developer.html

19

Page 20: Android Studioの魅力

さようならADT

20

EclipseベースのADTの開発は、

2015年末で終了

Page 21: Android Studioの魅力

Android Studio 3つの誤解

21

Page 22: Android Studioの魅力

Android Studio 3つの誤解

•安定していない

•異なるバージョンで互換性がない

•開発途上である

22

Page 23: Android Studioの魅力

安定していない

23

チェコJetBrains社が開発しているIntelliJ IDEAの

Community Editionがベースです

Android Studioは、登場から2年が経ち、

Release版は十分、安定しています

Page 24: Android Studioの魅力

1.0リリース以降、StudioとAndroid Gradle Pluginの互換性は保たれています

互換性を損なう場合6ヶ月以上、可能であれば1年の非推奨期間が設けられます

異なるバージョンで互換性がない

24

http://tools.android.com/tech-docs/new-build-system/version-compatibility

Page 25: Android Studioの魅力

開発途上である

25

YES

Studioはオープンソースで開発が進んでいるので、

あなたは開発をさらに加速できます

うれしい!

Page 26: Android Studioの魅力

Android Studioの魅力

26

Page 27: Android Studioの魅力

コード補完

27

Page 28: Android Studioの魅力

コード補完

28

Page 29: Android Studioの魅力

Permission Check

29

Page 30: Android Studioの魅力

Parcelable Generation

30

Page 31: Android Studioの魅力

Parcelable Generation

protected WiFiApSetting(Parcel in) { id = in.readLong(); ssid = in.readString(); security = in.readInt(); password = in.readString(); lastUsedDate = in.readLong();} @Overridepublic void writeToParcel(Parcel dest, int flags) { dest.writeLong(id); dest.writeString(ssid); dest.writeInt(security); dest.writeString(password); dest.writeLong(lastUsedDate); } @Overridepublic int describeContents() { return 0; } public static final Creator<WiFiApSetting> CREATOR = new Creator<WiFiApSetting>() { @Override public WiFiApSetting createFromParcel(Parcel in) { return new WiFiApSetting(in); } @Override public WiFiApSetting[] newArray(int size) { return new WiFiApSetting[size]; }};

31

Page 32: Android Studioの魅力

その他

統合されたSDK Manager

Data Binding Support ( ≧ 1.3 Beta )

NDK Support ( ≧ 1.3 RC3 ) ← New!

32

Page 33: Android Studioの魅力

Performance Tools - CPU monitor

33

Page 34: Android Studioの魅力

Performance Tools - Memory usage

34

Page 35: Android Studioの魅力

LeakCanary

https://github.com/square/leakcanary

35

Page 36: Android Studioの魅力

dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile project(':wifiapmanager') compile 'com.android.support:design:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' compile 'com.android.support:cardview-v7:22.2.0' compile 'com.jakewharton:butterknife:6.1.0' compile 'com.github.bumptech.glide:glide:3.6.0' compile 'de.greenrobot:eventbus:2.4.0' compile 'io.realm:realm-android:0.80.3' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'}

LeakCanary

build.gradle

36

Page 37: Android Studioの魅力

Gradle

Java言語用のビルドシステム

StudioはGradleでビルドするhttps://gradle.org/

37

Page 38: Android Studioの魅力

GradleでAndroidアプリをビルドするプラグイン

1.3.0-beta 4 (2015/06/29)

CIとの相性 ◎

Android Gradle Plugin

38

Page 39: Android Studioの魅力

39

Gradle で ビルドする

Page 40: Android Studioの魅力

apply plugin: 'com.android.application'android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "jp.co.c_lis.kehai.android" minSdkVersion 15 targetSdkVersion 22 versionCode 32 versionName "0.3.2" } buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }} dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile project(':wifiapmanager') compile 'com.android.support:design:22.2.1' compile 'com.android.support:recyclerview-v7:22.2.1' compile 'com.android.support:cardview-v7:22.2.1'}

build.gradle

40

build.gradle

Page 41: Android Studioの魅力

android {

compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "jp.co.c_lis.kehai.android" minSdkVersion 15 targetSdkVersion 22 versionCode 32 versionName "0.3.2" } }

build.gradle

41

build.gradle

Page 42: Android Studioの魅力

def gitSha() { return 'git rev-parse --short HEAD'.execute().text.trim()}

android { buildTypes { debug { minifyEnabled false versionNameSuffix ' (' + gitSha() + ')' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}

build.gradle

42

build.gradle

Page 43: Android Studioの魅力

/** * Automatically generated file. DO NOT MODIFY */package io.keiji.kehai;public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "jp.co.c_lis.kehai.android"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = "defaultFlavor"; public static final int VERSION_CODE = 32; public static final String VERSION_NAME = "0.3.2 (837c123)"; }

BuildConfig

43

build/generated/source/buildConfig/…/BuildConfig.java

Page 44: Android Studioの魅力

android { defaultConfig { applicationId "jp.co.c_lis.kehai.android" minSdkVersion 15 targetSdkVersion 22 versionCode 32 versionName "0.3.2" buildConfigField "String", "TEST", "\"MEGANEKKO\"" } }

BuildConfigのフィールド

44

build.gradle

Page 45: Android Studioの魅力

/** * Automatically generated file. DO NOT MODIFY */package io.keiji.kehai;public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "jp.co.c_lis.kehai.android"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = "defaultFlavor"; public static final int VERSION_CODE = 32; public static final String VERSION_NAME = "0.3.2 (837c123)"; // Fields from default config. public static final String TEST = "MEGANEKKO"; }

BuildConfigのフィールド

45

build/generated/source/buildConfig/…/BuildConfig.java

Page 46: Android Studioの魅力

リソース

android { defaultConfig { applicationId "jp.co.c_lis.kehai.android" minSdkVersion 15 targetSdkVersion 22 versionCode 32 versionName "0.3.2" resValue "string", "res_value_test", "hello gradle" }

}

46

build/generated/res/generated/…/values/generated.xml

Page 47: Android Studioの魅力

リソース

<?xml version="1.0" encoding="utf-8"?><resources> <!-- Automatically generated file. DO NOT MODIFY --> <!-- Values from default config. --> <string name="res_value_test">hello gradle</string> </resources>

47

build/generated/source/buildConfig…

Page 48: Android Studioの魅力

Build Variants

48

Build Types

Product Flavors

Page 49: Android Studioの魅力

Build Types

android {

buildTypes { debug { minifyEnabled false versionNameSuffix ' (' + gitSha() + ')' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }

}

49

build.gradle

Page 50: Android Studioの魅力

android { productFlavors { defaultFlavor { } forBetaTesting { applicationId "io.keiji.kehai.android" } }

}

Product Flavors

50

build.gradle

Page 51: Android Studioの魅力

51

Page 52: Android Studioの魅力

Product Flavors

package io.keiji.kehai;public enum OssLibrary { MaterialIcons("Material icons", "license_creative_commons-4.0.txt"), AOSP("Android Open Source Project", "license_aosp.txt"), V7Support("Android v7 Support Libraries", "license_aosp.txt"), DesignSupport("Android Design Support Library", "license_aosp.txt"), Glide("Glide", "license_glide.txt"), ButterKnife("Butter Knife", "license_butterknife.txt"), EventBus("EventBus", "license_eventbus.txt"), Realm("Realm", "license_realm.txt"); public final String name; public final String fileName; OssLibrary(String name, String file) { this.name = name; fileName = file; }}

52

src/main/io.keij.kehai/OssLibrary.java

Page 53: Android Studioの魅力

src/main/io.keiji.kehai/OssLibrary.java

src/defaultFlavor/以下に移動

53

Page 54: Android Studioの魅力

src/forBetaTesting/io.keiji.kehai/OssLibrary.java

作成

54

Page 55: Android Studioの魅力

Product Flavors

package io.keiji.kehai;public enum OssLibrary { Nothing("", ""); public final String name; public final String fileName; OssLibrary(String name, String file) { this.name = name; fileName = file; }}

55

src/forBetaTesting/io.keij.kehai/OssLibrary.java

Page 56: Android Studioの魅力

同じクラスが並列で存在する

src/defaultFlavor/io.keiji.kehai/OssLibrary.java

src/forBetaTesting/io.keiji.kehai/OssLibrary.java

56

Page 57: Android Studioの魅力

Build Variants

StudioからBuild Variantsを切り替える

Product Flavor × Build Type

57

Page 58: Android Studioの魅力

58

defaultFlavorDebug/Release forBetaTestingDebug/Release

Page 59: Android Studioの魅力

android {

splits { density { enable true exclude "ldpi", "tvdpi", "xxxhdpi" compatibleScreens 'small', 'normal', 'large', 'xlarge' } }

}

APK Splits

59

http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits

build.gradle

Page 60: Android Studioの魅力

APK Splits Sample

60

drawable-mdpi

drawable-hdpi

drawable-xhdpi

drawable-xxhdpi

Page 61: Android Studioの魅力

APK Splits Sample

apply plugin: 'com.android.application'android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "jp.co.c_lis.apkspritsample" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }} dependencies { compile fileTree(dir: 'libs', include: ['*.jar'])}

build.gradle

61

Page 62: Android Studioの魅力

APK Splits Sample

splits { density { enable true exclude "ldpi", "tvdpi", "xxxhdpi" compatibleScreens 'small', 'normal', 'large', 'xlarge' } }} dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }

build.gradle

62

Page 63: Android Studioの魅力

APK Splits Sample

$ ./gradlew assembleParallel execution is an incubating feature.:app:preBuild UP-TO-DATE:app:preDebugBuild UP-TO-DATE:app:checkDebugManifest:app:prepareDebugDependencies:app:compileDebugAidl UP-TO-DATE:app:compileDebugRenderscript UP-TO-DATE:app:generateDebugBuildConfig UP-TO-DATE:app:generateDebugAssets UP-TO-DATE : ::app:assembleRelease:app:assemble

BUILD SUCCESSFUL

63

Page 64: Android Studioの魅力

APK Splits Sample

app-hdpi-debug-unaligned.apk app-hdpi-debug.apk app-hdpi-release-unsigned.apk app-mdpi-debug-unaligned.apk app-mdpi-debug.apk app-mdpi-release-unsigned.apk app-universal-debug-unaligned.apk app-universal-debug.apk app-universal-release-unsigned.apk app-xhdpi-debug-unaligned.apk app-xhdpi-debug.apk app-xhdpi-release-unsigned.apk app-xxhdpi-debug-unaligned.apk app-xxhdpi-debug.apk app-xxhdpi-release-unsigned.apk

app/build/outputs/apk

64

Page 65: Android Studioの魅力

APK Splits Sample

app-hdpi-debug-unaligned.apk

65

Page 66: Android Studioの魅力

APK Splits Sample

<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.co.c_lis.apkspritsample" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727">

<compatible-screens> <screen android:screenDensity="hdpi" android:screenSize="small" /> <screen android:screenDensity="hdpi" android:screenSize="large" /> <screen android:screenDensity="hdpi" android:screenSize="xlarge" /> <screen android:screenDensity="hdpi" android:screenSize="normal" /> </compatible-screens>

AndroidManifest.xml

66

Page 67: Android Studioの魅力

app-defaultFlavor-hdpi-debug.apk

app-defaultFlavor-hdpi-release-unsigned.apk

app-defaultFlavor-mdpi-debug.apk

app-defaultFlavor-mdpi-release-unsigned.apk

app-defaultFlavor-universal-debug.apk

app-defaultFlavor-universal-release-unsigned.apk

app-defaultFlavor-xhdpi-debug.apk

app-defaultFlavor-xhdpi-release-unsigned.apk

app-defaultFlavor-xxhdpi-debug.apk

app-defaultFlavor-xxhdpi-release-unsigned.apk

app-forBetaTesting-hdpi-debug.apk

app-forBetaTesting-hdpi-release-unsigned.apk

app-forBetaTesting-mdpi-debug.apk

app-forBetaTesting-mdpi-release-unsigned.apk

app-forBetaTesting-universal-debug.apk

app-forBetaTesting-universal-release-unsigned.apk

app-forBetaTesting-xhdpi-debug.apk

app-forBetaTesting-xhdpi-release-unsigned.apk

app-forBetaTesting-xxhdpi-debug.apk

app-forBetaTesting-xxhdpi-release-unsigned.apk

やり過ぎに注意

Page 68: Android Studioの魅力

68

おわりに

Page 69: Android Studioの魅力

Android Studioの今後

dev branch release branch IntelliJ Notes

studio-1.2-dev studio-1.2-release idea14-1.2-dev CLOSED

studio-1.3-dev studio-1.3-release idea14-1.3-dev BUG FIX ONLY

studio-1.4-dev idea14-1.4-dev for 1.4 work

studio-master-dev studio-master-dev idea14-dev for post 1.4 work

http://tools.android.com/build#TOC-Branches

69

Page 70: Android Studioの魅力

• プロジェクトのファイル構成を変更 • main/java/… • androidTest/java/…

• AndroidManifest.xmlの設定をbuild.gradleに移行 • applicationId / *SdkVersion / versionCode / versionName

• 依存関係をdependenciesに記載

ADT から Studioへの移行

70

http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects

Page 71: Android Studioの魅力

• ADT側でExport →「Generate Gradle build files」 • Studio側でImport

ADT から Studioへの移行

71

http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects

Page 72: Android Studioの魅力

• ADT側でExport →「Generate Gradle build files• Studio側で

http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects

ADT から Studioへの移行

72

Page 73: Android Studioの魅力

使おう! Android Studio

73

SlideShare

https://goo.gl/vTK1Xn

Page 74: Android Studioの魅力

C-LIS CO., LTD.

各製品名・ブランド名、会社名などは、一般に各社の商標または登録商標です。 本資料中では、©、®、™を割愛しています。

本資料は、有限会社シーリスの著作物です。掲載されているイラストは、特に記載がない場合は根雪れいの著作物です。 本資料の全部、または一部について、著作者から文書による許諾を得ずに複製することは禁じられています。

The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

Page 75: Android Studioの魅力

おまけ トラブル集

75

Page 76: Android Studioの魅力

複数のライブラリに同じファイルがある

android {

packagingOptions { exclude 'META-INF/LICENCE.txt'}

}

76

build.gradle

重複するファイルをパッケージから除外する

Page 77: Android Studioの魅力

authoritiesが衝突する

<?xml version="1.0" encoding="utf-8"?><manifest> <application> <provider android:provider=".provider.MyProvider" android:authorities="${applicationId}.MyProvider" /> </application> </manifest>

77

AndroidManifest.xml

applicationIdを変数で置き換える

Page 78: Android Studioの魅力

意図しないバージョンアップ

dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile project(':wifiapmanager') compile 'com.android.support:design:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' compile 'com.android.support:cardview-v7:22.2.0' compile 'com.jakewharton:butterknife:6.1.0' compile 'com.github.bumptech.glide:glide:3.6.0' compile 'de.greenrobot:eventbus:2.4.0' compile 'io.realm:realm-android:+'

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'}

78

build.gradle

バージョンは固定すること!

Page 79: Android Studioの魅力

意図しないバージョンアップ

79

io.realm:realm-android:0.80.1 → io.realm:realm-android:0.81.1