jag201610 api diffで見るnougat

55

Upload: mokelab

Post on 16-Apr-2017

599 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Jag201610   API Diffで見るNougat
Page 2: Jag201610   API Diffで見るNougat

API Diffを見てみよう

モケラボ株式会社 fkm

Page 3: Jag201610   API Diffで見るNougat

● Androidアプリ開発● iOSアプリ開発● 開発レクチャー

● キャラクター展開○ グッズ作ったり

Page 4: Jag201610   API Diffで見るNougat

グッズあるよ!

Page 5: Jag201610   API Diffで見るNougat

日本Androidの会 メーリングリスト

Page 6: Jag201610   API Diffで見るNougat

https://googledevjp.blogspot.jp/2016/08/android-7-nougat.html

NougatAPI 24

Page 7: Jag201610   API Diffで見るNougat

https://googledevjp.blogspot.jp/2016/08/android-7-nougat.html

NougatAPI 24

Nougat MR1API 25

Page 8: Jag201610   API Diffで見るNougat

API Diff24↓

25

Page 9: Jag201610   API Diffで見るNougat

https://developer.android.com/sdk/api_diff/25/changes.html

http://bit.ly/android-diff-24-25

Page 10: Jag201610   API Diffで見るNougat

と、ここまでスライドつくってみて

1つ気づいたことがある

Page 11: Jag201610   API Diffで見るNougat

Material Motionのような動き

Google Slideじゃ作れない。。。

Page 12: Jag201610   API Diffで見るNougat

差分があるのは15パッケージ

● android ● android.app ● android.app.usage ● android.content ● android.content.pm ● android.content.res ● android.media ● android.os

● android.os.storage ● android.provider ● android.telecom ● android.telephony ● android.util ● android.view ● android.view.inputmethod

Page 13: Jag201610   API Diffで見るNougat

android.R.attr

XMLの属性が定義してあるとこ

いくつかフィールドが追加されている

● int shortcutDisabledMessage● int shortcutId ● int shortcutLongLabel ● int shortcutShortLabel

Page 14: Jag201610   API Diffで見るNougat

android.content.Context

新しい定数追加

String SHORTCUT_SERVICE

Page 15: Jag201610   API Diffで見るNougat

android.content.pm パッケージ

いくつかクラスが追加されている

● LauncherApps.ShortcutQuery ● ShortcutInfo ● ShortcutInfo.Builder ● ShortcutManager

Page 16: Jag201610   API Diffで見るNougat

App Shortcuts!

Page 17: Jag201610   API Diffで見るNougat
Page 18: Jag201610   API Diffで見るNougat

ん?

Page 19: Jag201610   API Diffで見るNougat

これどっかで

見たことない?

Page 20: Jag201610   API Diffで見るNougat

引用元:https://developer.apple.com/ios/3d-touch/

Page 21: Jag201610   API Diffで見るNougat

App shortcuts

対応方法は2種類

● XMLで指定する● アプリ起動中に動的に編集

Page 22: Jag201610   API Diffで見るNougat

XMLでショートカットを追加

1. AndroidManifest.xmlのActivityに<meta-data>を追加する

<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/></activity>

Page 23: Jag201610   API Diffで見るNougat

XMLでショートカットを追加

<shortcuts> <shortcut> <intent/> <categories /> </shortcut></shortcuts>

2. xml/shortcuts.xmlでショートカットを定義

Page 24: Jag201610   API Diffで見るNougat

XMLでショートカットを追加

<shortcuts> <shortcut> <intent/> <categories /> </shortcut></shortcuts>

2. xml/shortcuts.xmlでショートカットを定義

←ルート要素

←ショートカットの情報

←投げるIntent←おまじない

Page 25: Jag201610   API Diffで見るNougat

XMLでショートカットを追加

<shortcut android:shortcutId="compose" android:enabled="true" android:icon="@drawable/compose_icon" android:shortcutShortLabel="短い名前" android:shortcutLongLabel="長い名前" android:shortcutDisabledMessage="無効時のメッセージ"></shortcut>

Page 26: Jag201610   API Diffで見るNougat

アプリ起動中にショートカット追加

例えば、チャットアプリで「この人に送信」ショートカットを作りたい時などに使う

Page 27: Jag201610   API Diffで見るNougat

アプリ起動中にショートカット追加

作り方

1. ShortcutManagerを取り出す→getSystemService(ShortcutManager.class);

2. ShortcutInfoを作る3. manager.setDynamicShortcuts()

Page 28: Jag201610   API Diffで見るNougat

アプリ起動中にショートカット追加

2. ShortcutInfoを作る

ShortcutInfo shortcut = new ShortcutInfo.Builder(getActivity(), "id1") .setShortLabel("アイコン時の名前") .setLongLabel("ロングタップ時の名前") .setIcon(Icon.createWithResource(getActivity(), R.mipmap.ic_launcher)) .setIntent(it) .build();

Page 29: Jag201610   API Diffで見るNougat

ベストプラクティス

● デザインガイドラインに従おう● 4つまでにしよう● 説明は短い方が10文字。長い方は25文字。● 同じ作業をアプリからでもできるように

○ ショートカットに対応してないホームアプリもあるよ

● updateは意味が同じときのみにしよう● 動的に追加したものはリストアされないよ

Page 30: Jag201610   API Diffで見るNougat

くわしくは

https://developer.android.com/preview/shortcuts.html

Page 31: Jag201610   API Diffで見るNougat

定数追加

● int DENSITY_260 ● int DENSITY_300 ● int DENSITY_340

Android Wear用「実デバイスがこれに近いから、追加しといたでー」

android.util.DisplayMetrics

Page 32: Jag201610   API Diffで見るNougat

Android Wear系

WearableExtenderにメソッド追加

● setHintDisplayActionInline()● getHintDisplayActionInline()

Page 33: Jag201610   API Diffで見るNougat

API 25のWearエミュレーターは

まだ、ない。。。

Page 34: Jag201610   API Diffで見るNougat

InputContentInfo という新キャラ

commitContent()というメソッドがいろんなクラス/インターフェースに追加されている

android.view.inputmethod

Page 35: Jag201610   API Diffで見るNougat

Image Keyboard Support

Page 36: Jag201610   API Diffで見るNougat

引用元:https://developer.android.com/preview/image-keyboard.html

アニメGIFが貼れる

Page 37: Jag201610   API Diffで見るNougat

ん?

Page 38: Jag201610   API Diffで見るNougat

これどっかで

見たことない?

Page 39: Jag201610   API Diffで見るNougat

引用元:https://developer.apple.com/imessage/

Page 40: Jag201610   API Diffで見るNougat

EditTextで対応する必要があります。

コード量が結構あるので

https://developer.android.com/preview/image-keyboard.htmlをみてね

どう実装するの?

Page 41: Jag201610   API Diffで見るNougat

API 24 → 25のdiffまとめ

奇抜なdiffは実はありませんでした

https://developer.android.com/preview/api-overview.htmlに書いてある通りのdiffといった感じ

Page 42: Jag201610   API Diffで見るNougat

API Diff23↓

24

Page 43: Jag201610   API Diffで見るNougat

追加パッケージ

● android.icu.lang ● android.icu.math ● android.icu.text ● android.icu.util ● android.os.health

● android.service.quicksettings● android.service.vr ● java.util.function ● java.util.stream

※変更のあるパッケージはたくさん

Page 44: Jag201610   API Diffで見るNougat

7.0の新機能はもう

ご存知だと思うので。。。

Page 45: Jag201610   API Diffで見るNougat

Contextクラス

boolean deleteSharedPreferences(String)→指定したSharedPreferenceファイルを削除する

それ、無かったんかい

Page 46: Jag201610   API Diffで見るNougat

DatePickerDialogクラス

次のコンストラクタが追加

DatePickerDialog (Context context)

それ、無かったんかい

→現在時刻でダイアログ作るよ!

Page 47: Jag201610   API Diffで見るNougat

みんな大好きFragmentに次のメソッド追加

void onAttachFragment(Fragment)

それ、無かったんかい

→Fragment in Fragmentで、子Fragmentを貼り付けようとする時に呼ばれるよ!

引数には、これから貼り付ける子Fragmentが渡されるよ!

Page 48: Jag201610   API Diffで見るNougat

BackupAgentに次のメソッド追加

void onQuotaExceeded(long, long)

それ、無かったんかい

→バックアップしようとして、容量オーバーだった時に呼ばれるよ!

Page 49: Jag201610   API Diffで見るNougat

GradientDrawableに大量のgetter● ColorStateList getColor() ● int[] getColors() ● float[] getCornerRadii() ● float getCornerRadius() ● float getGradientCenterX() ● float getGradientCenterY() ● int getGradientType() ● int getShape() ● boolean getUseLevel()

それ、無かったんかい

Page 50: Jag201610   API Diffで見るNougat

Deprecated

テストといえばandroid.testパッケージだよね!

Page 51: Jag201610   API Diffで見るNougat

android.testは全滅!

Page 52: Jag201610   API Diffで見るNougat

サポートライブラリを使うのが主流@RunWith(AndroidJUnit4.class)public class ExampleInstrumentedTest { @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext();

assertEquals("package", appContext.getPackageName()); }}

テストはどうなる?

Page 53: Jag201610   API Diffで見るNougat

たのしめました?

Page 54: Jag201610   API Diffで見るNougat

● API 23→24の大きな差分はJava 8● API 24→25は純粋な機能追加● API Diffを見ると、地道な改善の跡が発見でき

るよ!● こっそりDeprecatedになったのもわかるよ!

まとめ

Page 55: Jag201610   API Diffで見るNougat

モケラを

よろしくおねがいします