Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android Studioの魅力

13,967 views

Published on

やっちゃった。

Published in: Technology
  • Be the first to comment

Android Studioの魅力

  1. 1. C-LIS CO., LTD. Twitter : #abc2015s
  2. 2. 自己紹介 2 大阪市のソフトウェア開発会社
 "有限会社シーリス"の代表。 Androidアプリケーションの受託開発や、
 Androidに関するコンサルティング業務の傍ら、 技術系月刊誌への記事執筆。 また、AOSP(Android Open Source Project)へ コントリビュートをしています。
  3. 3. Android Studio とは 3 2013年5月 IntelliJ IDEAベース 単体ソフトとして配布
  4. 4. Android Developer Tools 4 2007年11月 Eclipseプラグイン 後に単体ソフトとして配布
  5. 5. Google I/O 2013 撮影: Shoya Tsukada 5
  6. 6. 本を執筆することに 2014年11月21日発売 技術評論社刊 Android Studio 0.8.6 http://amzn.to/1HYRp32 6
  7. 7. 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
  8. 8. 8
  9. 9. 9
  10. 10. 10
  11. 11. 11 http://blog.keiji.io/2014/12/c87.html
  12. 12. 12 いろいろあって…
  13. 13. 13
  14. 14. 14 どうしてこうなった
  15. 15. http://techbooster.github.io/c88/ Copyright TechBooster
  16. 16. 自己紹介 16 2015年 後半の目標
 @keiji_ariyama まじめになる
  17. 17. 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
  18. 18. 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
  19. 19. ADT http://android-developers.blogspot.jp/2015/06/an-update-on-eclipse-android-developer.html 19
  20. 20. さようならADT 20 EclipseベースのADTの開発は、 2015年末で終了
  21. 21. Android Studio 3つの誤解 21
  22. 22. Android Studio 3つの誤解 •安定していない •異なるバージョンで互換性がない •開発途上である 22
  23. 23. 安定していない 23 チェコJetBrains社が開発しているIntelliJ IDEAの Community Editionがベースです Android Studioは、登場から2年が経ち、
 Release版は十分、安定しています
  24. 24. 1.0リリース以降、StudioとAndroid Gradle Pluginの 互換性は保たれています 互換性を損なう場合6ヶ月以上、
 可能であれば1年の非推奨期間が
 設けられます 異なるバージョンで互換性がない 24 http://tools.android.com/tech-docs/new-build-system/version-compatibility
  25. 25. 開発途上である 25 YES Studioはオープンソースで開発が進んでいるので、 あなたは開発をさらに加速できます うれしい!
  26. 26. Android Studioの魅力 26
  27. 27. コード補完 27
  28. 28. コード補完 28
  29. 29. Permission Check 29
  30. 30. Parcelable Generation 30
  31. 31. Parcelable Generation protected WiFiApSetting(Parcel in) {
 id = in.readLong();
 ssid = in.readString();
 security = in.readInt();
 password = in.readString();
 lastUsedDate = in.readLong();
 }
 
 @Override
 public void writeToParcel(Parcel dest, int flags) {
 dest.writeLong(id);
 dest.writeString(ssid);
 dest.writeInt(security);
 dest.writeString(password);
 dest.writeLong(lastUsedDate);
 }
 
 @Override
 public 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
  32. 32. その他 統合されたSDK Manager Data Binding Support ( ≧ 1.3 Beta ) NDK Support ( ≧ 1.3 RC3 ) ← New! 32
  33. 33. Performance Tools - CPU monitor 33
  34. 34. Performance Tools - Memory usage 34
  35. 35. LeakCanary https://github.com/square/leakcanary 35
  36. 36. 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
  37. 37. Gradle Java言語用のビルドシステム StudioはGradleでビルドする https://gradle.org/ 37
  38. 38. GradleでAndroidアプリをビルドするプラグイン 1.3.0-beta 4 (2015/06/29) CIとの相性 ◎ Android Gradle Plugin 38
  39. 39. 39 Gradle で ビルドする
  40. 40. 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
  41. 41. 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
  42. 42. 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
  43. 43. /**
 * 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
  44. 44. 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
  45. 45. /**
 * 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
  46. 46. リソース 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
  47. 47. リソース <?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…
  48. 48. Build Variants 48 Build Types Product Flavors
  49. 49. 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
  50. 50. android {
 
 productFlavors {
 defaultFlavor {
 }
 forBetaTesting {
 applicationId "io.keiji.kehai.android"
 }
 }
 } Product Flavors 50 build.gradle
  51. 51. 51
  52. 52. 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
  53. 53. src/main/io.keiji.kehai/OssLibrary.java を src/defaultFlavor/以下に移動 53
  54. 54. src/forBetaTesting/io.keiji.kehai/OssLibrary.java を 作成 54
  55. 55. 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
  56. 56. 同じクラスが並列で存在する src/defaultFlavor/io.keiji.kehai/OssLibrary.java src/forBetaTesting/io.keiji.kehai/OssLibrary.java 56
  57. 57. Build Variants StudioからBuild Variantsを切り替える Product Flavor × Build Type 57
  58. 58. 58 defaultFlavorDebug/Release forBetaTestingDebug/Release
  59. 59. 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
  60. 60. APK Splits Sample 60 drawable-mdpi drawable-hdpi drawable-xhdpi drawable-xxhdpi
  61. 61. 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
  62. 62. 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
  63. 63. APK Splits Sample $ ./gradlew assemble Parallel 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
  64. 64. 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
  65. 65. APK Splits Sample app-hdpi-debug-unaligned.apk 65
  66. 66. 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
  67. 67. 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 やり過ぎに注意
  68. 68. 68 おわりに
  69. 69. 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
  70. 70. • プロジェクトのファイル構成を変更 • 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
  71. 71. • ADT側でExport →「Generate Gradle build files」 • Studio側でImport ADT から Studioへの移行 71 http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects
  72. 72. • ADT側でExport →「Generate Gradle build files • Studio側で http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects ADT から Studioへの移行 72
  73. 73. 使おう! Android Studio 73 SlideShare https://goo.gl/vTK1Xn
  74. 74. 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.
  75. 75. おまけ トラブル集 75
  76. 76. 複数のライブラリに同じファイルがある android {
 packagingOptions {
 exclude 'META-INF/LICENCE.txt'
 } } 76 build.gradle 重複するファイルをパッケージから除外する
  77. 77. 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を変数で置き換える
  78. 78. 意図しないバージョンアップ 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 バージョンは固定すること!
  79. 79. 意図しないバージョンアップ 79 io.realm:realm-android:0.80.1 → io.realm:realm-android:0.81.1

×