Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android 14 新機能 / Android 14 Meetup Nagoya
Search
star_zero
August 10, 2023
Programming
650
1
Share
Android 14 新機能 / Android 14 Meetup Nagoya
star_zero
August 10, 2023
More Decks by star_zero
See All by star_zero
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
1.6k
Jetpack Compose の Side-effect を使いこなす / DroidKaigi 2023
star_zero
5
6.9k
Android 14 と Predictive back gesture / Shibuya.apk #42
star_zero
0
470
Coroutines Test 入門 / Android Test Night #8
star_zero
2
1.3k
What's new in Jetpack / I/O Extended Japan 2022
star_zero
1
700
Kotlin 2021 Recap / DevFest 2021
star_zero
3
1.3k
Kotlin Symbol Processing (KSP) を使ったコード生成 / DroidKaigi 2021
star_zero
2
5.3k
What's new Android 12
star_zero
0
610
これからはじめるAndroid開発 / DevFest 2020
star_zero
4
750
Other Decks in Programming
See All in Programming
モダンOBSプラグイン開発
umireon
0
200
Nuxt Server Components
wattanx
0
240
おれのAgentic Coding 2026/03
tsukasagr
1
130
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
300
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
480
「速くなった気がする」をデータで疑う
senleaf24
0
130
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
230
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
300
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
1
620
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
390
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
430
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
Speed Design
sergeychernyshev
33
1.6k
GraphQLとの向き合い方2022年版
quramy
50
14k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
300
GitHub's CSS Performance
jonrohan
1032
470k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
Designing for humans not robots
tammielis
254
26k
How to make the Groovebox
asonas
2
2.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Transcript
Android 14 Meetup Nagoya 2023/08/10 Android 14 新機能
• Kenji Abe • Google Developers Expert for Android, Kotlin
• DeNA Co., Ltd. • X: @STAR_ZERO • Bluesky: @star-zero.com 自己紹介
Per-app language preferences
• AGP 8.1.0-alpha07 から • values-* フォルダを判別して LocaleConfig を自動で生成 LocaleConfigの自動生成
// app/build.gradle android { androidResources { generateLocaleConfig = true }
} // res/resources.properties unqualifiedResLocale=en-US
None
• 実行中にアプリごとの言語設定を変更可能 • A/Bテストや、地域によって設定を変えたりなど可能に LocaleConfigの動的更新
val localManger = getSystemService<LocaleManager>()!! // 言語設定をOverride localManger.overrideLocaleConfig = LocaleConfig( LocaleList(
Locale.ENGLISH, Locale.ITALIAN ) ) // Overrideした設定を戻す localManger.overrideLocaleConfig = null
Grammatical Inflection API
• フランス語 ◦ 男性: Vous êtes abonné à… ◦ 女性:
Vous êtes abonnée à… ◦ 中立: Abonnement à...activé Grammatical Inflection API
None
val grammaticalInflectionManager = context.getSystemService<GrammaticalInflectionManager>()!! grammaticalInflectionManager .setRequestedApplicationGrammaticalGender( Configuration.GRAMMATICAL_GENDER_FEMININE // or Configuration.GRAMMATICAL_GENDER_MASCULINE
// or Configuration.GRAMMATICAL_GENDER_NEUTRAL // or Configuration.GRAMMATICAL_GENDER_NOT_SPECIFIED )
地域別の設定
None
地域別の設定 // androidx.core:core:1.12.0 val temperature = LocalePreferences.getTemperatureUnit() val firstDayOfWeek =
LocalePreferences.getFirstDayOfWeek()
Screenshot detection API
• スクリーンショットを撮ったことを検知できる • スクリーンショット自体を取得することはできない Screenshot detection API
<!-- AndroidManifest.xml --> <uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
class MainActivity : ComponentActivity() { val screenCaptureCallback = ScreenCaptureCallback {
// ... } override fun onStart() { super.onStart() registerScreenCaptureCallback( mainExecutor, screenCaptureCallback ) } override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) } }
None
Predictive Back Gesture
• Android 13で導入、Android 14で改善 • Activity単位でのOpt-in • Activity間でのアニメーション • 新しいAPIが追加され、カスタムアニメーションが可能に
Predictive Back Gesture
<manifest> <application> <activity android:name=".MainActivity"> <!-- ... --> </activity> <!-- このActivityだけ
Predicitive back gesture を有効にする --> <activity android:name=".SampleActivity" android:enableOnBackInvokedCallback="true" /> </application> </manifest>
https://developer.android.com/about/versions/14/features/predictive-back
// androidx.activity:activity-ktx:1.8.0-alpha06 val callBack = object : OnBackPressedCallback(true) { override
fun handleOnBackStarted(backEvent: BackEventCompat) { // Gestureが始まったとき } override fun handleOnBackProgressed(backEvent: BackEventCompat) { // Gestureの進捗 } override fun handleOnBackPressed() { // Gestureが完了したとき } override fun handleOnBackCancelled() { // キャンセルされたとき } }
Path
val path = Path().apply { moveTo(0f, 0f) lineTo(200f, 0f) lineTo(200f,
200f) lineTo(0f, 200f) close() } canvas.drawPath(path, paint)
val pathIterator = path.pathIterator pathIterator.forEach { segment -> // PathIterator.VERB_MOVE,
// PathIterator.VERB_LINE, // PathIterator.VERB_CLOSE など val verb = segment.verb // verbの操作のポイントデータ val points = segment.points }
VERB_MOVE - [0, 0, 0, 0, 0, 0, 0, 0]
VERB_LINE - [0, 0, 200, 0, 0, 0, 0, 0] VERB_LINE - [200, 0, 200, 200, 0, 0, 0, 0] VERB_LINE - [200, 200, 0, 200, 0, 0, 0, 0] VERB_CLOSE - [200, 200, 0, 200, 0, 0, 0, 0] moveTo(0f, 0f) lineTo(200f, 0f) lineTo(200f, 200f) lineTo(0f, 200f) close()
• androidx.graphics:graphics-path もある ◦ API 21からサポート Path
ありがとうございました