2018-05-22-android-app-bundle

Daec7e5cd5fae384eda88037d937343b?s=47 AAkira
May 22, 2018

 2018-05-22-android-app-bundle

CA.apk Google I/O 報告会
Android App Bundle
https://cyberagent.connpass.com/event/84233/

Daec7e5cd5fae384eda88037d937343b?s=128

AAkira

May 22, 2018
Tweet

Transcript

  1. Android App Bundle @_a_akira CA.aab (apk) Google I/O 2018報告会

  2. About me @_a_akira AAkira CyberAgent, Inc. FRESH! Akira Aratani

  3. Agenda • About Android App Bundle • App Bundle •

    Dynamic Delivery • Develop Android App Bundle • Upload .aab file to PlayStore • bundle tool • Summary
  4. About Android App Bundle

  5. https://www.youtube.com/watch?v=flU42CTF3MQ Google I/O 2018 Developer keynote (0:09:00頃)

  6. Innovative distribution

  7. None
  8. 1% down per 6MB

  9. Android App Bundle 10PB saved per day

  10. Android App Bundle .aab ≠ .apk

  11. Android App Bundle

  12. Android App Bundle arm 64 bit Lang : US hdpi

    x86 arm xxhdpi xhdpi dpi Lang : JA Lang : PL Lang : IT Lang : IS Lang : FR Lang : DE Lang : ES Lang : NL Lang : TR
  13. Android App Bundle arm 64 bit Lang : US hdpi

    x86 arm xxhdpi xhdpi dpi Lang : JA Lang : PL Lang : IT Lang : IS Lang : FR Lang : DE Lang : ES Lang : NL Lang : TR
  14. Android App Bundle arm 64 bit Lang : US hdpi

    x86 arm xxhdpi xhdpi dpi Lang : JA Lang : PL Lang : IT Lang : IS Lang : FR Lang : DE Lang : ES Lang : NL Lang : TR arm 64 bit Lang : US hdpi x86 arm xxhdpi xhdpi dpi Lang : JA Lang : PL Lang : IT Lang : IS Lang : FR Lang : DE Lang : ES Lang : NL Lang : TR 全てのリソースを 端末にインストール
  15. Android App Bundle arm 64 bit Lang : US hdpi

    x86 arm xxhdpi xhdpi dpi Lang : JA Lang : PL Lang : IT Lang : IS Lang : FR Lang : DE Lang : ES Lang : NL Lang : TR
  16. Android App Bundle hdpi x86 arm arm 64 bit Lang

    : US xxhdpi xhdpi dpi Lang : JA Lang : PL Lang : IT Lang : IS Lang : FR Lang : DE Lang : ES Lang : NL Lang : TR arm 64 bit Lang : US xxhdpi 必要なリソースのみを 端末にインストール
  17. Android App Bundle

  18. Android App Bundle FRESH! 35.8% saving

  19. Dynamic Delivery

  20. Dynamic Delivery Sell Browse Buy e-commerce app

  21. Dynamic Delivery Sell Browse Buy e-commerce app Browse Buy 初回DLでは必要な部分だけ

  22. Dynamic Delivery Browse Buy Sell Browse Buy Sell e-commerce app

    必要な時に新しくDL
  23. Dynamic Delivery

  24. Dynamic Delivery • 後からfeature moduleをDL可能 • コードpush的な使い方は出来ない
 (各feature moduleのversion codeは合わせる必要ある)

    • moduleを選択出来るのでA/Bテストみたいな使い方も出来そう
  25. Develop
 Android App Bundle

  26. Environment

  27. Environment 
 dependencies { classpath “com.android.tools.build:gradle:3.2.0-alpha14” }

  28. Build App Bundle

  29. Build App Bundle 
 $ ./gradlew [module]:bundleVariant e.g.
 ./gradlew bundleDevRelease

  30. Build App Bundle 
 module/build/outputs/bundleVariant/bundle.aab

  31. Publish bundle.aab

  32. Publish bundle.aab

  33. Prepare keystore 
 $ java -jar pepk.jar \
 --keystore=[your keystore]

    \ --alias=[keystore alias] \
 --output=[encrypted_private_key] \
 --encryptionkey=[hogehogehoge]
  34. 
 $ java -jar pepk.jar \
 --keystore=[your keystore] \ --alias=[keystore

    alias] \
 --output=[encrypted_private_key] \
 --encryptionkey=[hogehogehoge] Prepare keystore storeからDL
  35. 
 $ java -jar pepk.jar \
 --keystore=[your keystore] \ --alias=[keystore

    alias] \
 --output=[encrypted_private_key] \
 --encryptionkey=[hogehogehoge] Prepare keystore 既存のkeystoreを指定
  36. 
 $ java -jar pepk.jar \
 --keystore=[your keystore] \ --alias=[keystore

    alias] \
 --output=[encrypted_private_key] \
 --encryptionkey=[hogehogehoge] Prepare keystore keystoreのaliasを指定
  37. 
 $ java -jar pepk.jar \
 --keystore=[your keystore] \ --alias=[keystore

    alias] \
 --output=[encrypted_private_key] \
 --encryptionkey=[hogehogehoge] Prepare keystore 任意のファイル名
  38. 
 $ java -jar pepk.jar \
 --keystore=[your keystore] \ --alias=[keystore

    alias] \
 --output=[encrypted_private_key] \
 --encryptionkey=[hogehogehoge] Prepare keystore storeに表示されているkeyを指定
  39. Publish bundle.aab

  40. bundle tool google/bundletool https://github.com/google/bundletool

  41. bundle tool 
 $ bundletool build-apks \
 --bundle=<bundle.aab> \ --output=<out.apks>


  42. bundle tool $ mkdir apks
 $ unzip out.apks -d apks

  43. bundle tool $ ls base-hdpi.apk base-master.apk base-tvdpi.apk base-xxhdpi.apk standalone-hdpi.apk standalone-mdpi.apk

    standalone-xhdpi.apk standalone-xxxhdpi.apk base-ldpi.apk base-mdpi.apk base-xhdpi.apk base-xxxhdpi.apk standalone-ldpi.apk standalone-tvdpi.apk standalone-xxhdpi.apk toc.pb
  44. bundle tool $ bundletool get-device-spec \
 --output=<device.json> \ 接続端末の情報を出力

  45. bundle tool $ bundletool get-device-spec \
 --output=<device.json> \ { "supportedAbis":

    ["arm64-v8a", "armeabi-v7a"], "supportedLocales": ["en-US"], "screenDensity": 640, "sdkVersion": 27 } Pixel2.json
  46. bundle tool $ bundletool extract-apks \
 --apks=<app.apks> \ --output-dir=<pixel_apks_dir> \

    --device-spec=pixel2.json
  47. bundle tool $ bundletool extract-apks \
 --apks=<app.apks> \ --output-dir=<pixel_apks_dir> \

    --device-spec=pixel2.json
  48. bundle tool $ bundletool extract-apks \
 --apks=<app.apks> \ --output-dir=<pixel_apks_dir> \

    --device-spec=pixel2.json
  49. bundle tool $ bundletool extract-apks \
 --apks=<app.apks> \ --output-dir=<pixel_apks_dir> \

    --device-spec=pixel2.json
  50. bundle tool $ ls base-master.apk base-xxxhdpi.apk
 base-arm64_v8.apk base-en.apk

  51. bundle tool android { splits { language { enable true

    include "en", "ja" } density { enable true } abi { enable true } } }
  52. bundle tool android { splits { language { enable true

    include "en", "ja" } density { enable true } abi { enable true } } } 言語ファイルの分割
  53. bundle tool android { splits { language { enable true

    include "en", "ja" } density { enable true } abi { enable true } } } 画面サイズの分割
  54. bundle tool android { splits { language { enable true

    include "en", "ja" } density { enable true } abi { enable true } } } CPU命令セットの分割
  55. bundle tool android { splits { language { enable true

    include "en", "ja" } density { enable true } abi { enable false } } } 分割不要ならfalse
  56. bundle tool android { generatePureSplits true splits { language {

    enable true include "en", "ja" } density { enable true } abi { enable true } } }
  57. bundle tool android { generatePureSplits true splits { language {

    enable true include "en", "ja" } ɹɹ… multi apk, instant appsで使われてる
  58. bundle tool android { generatePureSplits true splits { language {

    enable true include "en", "ja" } ɹɹ… min SDK21以上 multi apk, instant appsで使われてる
  59. bundle tool 通常のbuildで分割される (↑instant apps)

  60. bundle tool applicationはフォルダ内で分割されて出力

  61. Appendixes

  62. Sample Project AAkira/DaggerInstantApps https://goo.gl/7xqb5M 既存アプリへのInstantApps導入
 @DroidKaigi2018 https://goo.gl/b7kHhf

  63. Instant Apps 10MBまで配布可能に! https://g.co/instantapps/10mb

  64. YouTube Links https://youtu.be/ 9D63S4ZRBls https://youtu.be/ httqEshs_Bk https://youtu.be/ 0raqVydJmNE https://youtu.be/ bViNOUeFuiQ

  65. Summary

  66. Summary • App Bundleの対応は凄く簡単なので、
 次のリリースからすぐに対応可能 • Dynamic Deliveryはコードpushではない • これからのアプリはmodule化が必須

    • 今後InstantApps, Dynamic Deliveryはデフォルト構成に
  67. Summary Googlerと話したほうが良い
 
 2日目のSandboxで2時間
 3日目のOffice Hourで2時間

  68. @_a_akira AAkira Thanks