Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
R8 の設定見直しでアプリサイズ削減
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ANDPAD inc
October 07, 2026
Programming
93
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
R8 の設定見直しでアプリサイズ削減
長堀 翔太
@nashcft
2026 年 10 月 7 日
食べログ × ANDPAD × Sansan モバイル勉強会 #5
ANDPAD inc
October 07, 2026
More Decks by ANDPAD inc
See All by ANDPAD inc
Go 探無比ワークショップ開催レポート
andpad
0
81
self-service-infrastructure-with-argocd-and-atlantis
andpad
0
2
実行場所を意識させない i18n API を作った話
andpad
1
230
Go 1.27 における memory allocation の高速化
andpad
0
430
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
220
OS アップデート対応の取り組み方がもっと共有されてほしい
andpad
0
150
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
610
ANDPAD Ruby sponsor session in RubyKaigi 2026
andpad
0
300
AWS WAFの運用を地道に改善し、自社で運用可能にするプラクティス
andpad
2
1.4k
Other Decks in Programming
See All in Programming
iOSDCのペンライトを自動制御したい!
akkeylab
0
360
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.7k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
540
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
140
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
420
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
120
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
110
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.3k
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Featured
See All Featured
The Curse of the Amulet
leimatthew05
3
15k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
Everyday Curiosity
cassininazir
0
340
エンジニアに許された特別な時間の終わり
watany
109
250k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
The Cult of Friendly URLs
andyhume
79
7k
Scaling GitHub
holman
464
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
How to Talk to Developers About Accessibility
jct
2
560
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Transcript
R8 設定見直しでアプリサイズ削減 2026-10-07 食べログ × ANDPAD × Sansan モバイル勉強会 #5
Shota Nagahori (@nashcft) © 2026 ANDPAD All Rights Reserved.
自己紹介 Shota Nagahori SWE @ ANDPAD Inc. X, GitHub, etc.:
@nashcft © 2026 ANDPAD All Rights Reserved. 2
最近の R8 トピック https://android-developers.googleblog.com/2026/08/app-quality-memory-optimization-secureonboarding.html © 2026 ANDPAD All Rights Reserved.
3
App quality の評価指標にアプリの最適化度合いが追加される 詳細 @ Help Center -> https://support.google.com/googleplay/androiddeveloper/answer/17492799#dex_code_optimization&zippy=%2Cdex-codeoptimization DEX
のサイズが一定以上のアプリ・ゲームに対し、 Obfuscation, Optimization, Shrinking 3項目の達成率がそれぞれ25%以上であることが品質要求に加わる 2027-02 から適用される予定 達成率が足りないと Play Store での露出などでペナルティが発生するとのこと 詳細は年内に発表される予定 R8 の設定をできるだけ有効化して圧縮や難読化の適用範囲を広げよう 自分のアプリ・ゲームの DEX のサイズや、各項目の達成率は Play Console の app bundle explorer で確認できるようになっている (実行時メモリ使用量など別の評価指標も同時に追加されるが、今回は省略) © 2026 ANDPAD All Rights Reserved. 4
Play Console で諸々の情報が確認できる from https://android-developers.googleblog.com/2026/08/app-quality-memory-optimization-secureonboarding.html © 2026 ANDPAD All Rights
Reserved. 5
ANDPAD アプリでの取り組み © 2026 ANDPAD All Rights Reserved. 6
ANDPAD アプリ 2016-03 リリース リリースしてから今年で10年 大体150画面くらいの規模感 最近 R8 の設定を見直して最適化度合いを改善した この話をします
DroidKaigi 2026 のブースで紹介していたりした © 2026 ANDPAD All Rights Reserved. 7
Before © 2026 ANDPAD All Rights Reserved. 8
Play Console で達成率を見てみましょう © 2026 ANDPAD All Rights Reserved. 9
R8 の設定ファイルを見てみましょう © 2026 ANDPAD All Rights Reserved. 10
何も圧縮してない!!! 細かい話を抜きにするとこの設定でやっていることは「すべてのコードをそのまま保持する」 「すべて」というのは自分たちの project 内のコードだけでなく依存ライブラリのコードも 含んでいる => 依存ライブラリの API を含めたすべての
class や method などが全部そのままアプ リの中に含められてしまうということ どうなるか DEX の肥大化 APK ファイルの中身を見たら DEX ファイルが14個あった DEX ファイル1つに含められる method の上限が65536 => 90万前後の method がある計算 DEX が大きいともちろんアプリのサイズも大きい © 2026 ANDPAD All Rights Reserved. 11
(余談) R8 のバグに遭遇していた あまりに DEX ファイルが多いのでそれ起因で R8 のバグを踏み抜くなどしていた AGP intermittently
produces dex files that fail verification and crash app on launch: https://issuetracker.google.com/issues/485558707 雑に説明すると R8 の並列処理のミスで壊れた DEX ファイルができる (ことがある) これによりインストール後の OAT への変換に失敗して壊れた実行ファイルができる => 含まれているは ずの class を見つけられずアプリがクラッシュする 最終的な DEX ファイル数が10個以上あるような大きなアプリで起こりやすいらしい? 観測範囲では DEX ファイルが5, 6個くらいまでの APK で遭遇したことなし 現在は修正されたバージョンがリリースされている 使っている AGP のバージョンが古い場合は R8 のバージョンを直接指定しないと取り込めないので 注意 (余談の余談) 対応後にバグの存在に気ついた DEX ファイルを削減した結果遭遇しなくなったのでヨシ! ということにした (?) あとで修正適用した © 2026 ANDPAD All Rights Reserved. 12
どうしてこんな暴挙を... なにやら R8 の設定をちゃんとやることを諦めたらしい そんな... ANDPAD アプリでは GSON を使っており、それ関連の対処をする時間を十分に 取れなかった
or 対応中に打ちのめされてしまったのではないか 実際今回の改善でも一番手間のかかった箇所ではあった © 2026 ANDPAD All Rights Reserved. 13
なぜ最近までこのままだったのか 以前は前述のバグによるアプリクラッシュが発生してなかったので見過ごされていた 最近の機能開発で巨大なライブラリを導入しており、それ以降当該クラッシュが発生 するビルドがしばしば作成されるようになった リリース作業に実害が出るようになり調査 => R8 で何も圧縮していない問題を 発見 =>
やるか... © 2026 ANDPAD All Rights Reserved. 14
というわけでやっていきましょう © 2026 ANDPAD All Rights Reserved. 15
R8 の圧縮をきちんとかける 依存ライブラリに必要な設定を確認する 問題のある設定を削除してビルド => 失敗する時は不足している設定を追加する ビルドができたらアプリを動かす => 実行時に発生する問題を発見・対処する GSON
を避ける © 2026 ANDPAD All Rights Reserved. 16
依存ライブラリの設定を確認 近年ではライブラリに R8 の設定が同梱されていることが期待できる こういう依存に対しては (抜け漏れがない限り) 設定を行う必要なし OSS の場合は設定がパッケージされているか確認しよう AAR
で配布している場合: build.gradle(.kts) に consumerProguardFiles の設定 JAR で配布している場合: resources/META-INF/proguard 配下 設定が同梱されてないライブラリの依存がある場合 ドキュメントや issue などで言及がないか探して、あればそれを適用する 言及もなければ以後のステップに進んで実際にビルドしたり動かしたりして必要な設定 を確認する 参考) Optimization for library authors: https://developer.android.com/topic/performance/app-optimization/libraryoptimization © 2026 ANDPAD All Rights Reserved. 17
問題のある設定を削除してビルド 設定が不十分だと minify<Variant>WithR8 task でエラーが発生することがある Minify で失敗した時はビルドの出力に missing_rules.txt というファイルが作成される のでそれを確認して
keep rules に追加する © 2026 ANDPAD All Rights Reserved. 18
アプリを動かして確認 実行時に参照先が消されてしまっている・難読化によって名前が変わってしまっていて参照に 失敗することがある Reflection を使っている、ネイティブライブラリから Java/Kotlin の API を参照してい る場合
文字列で名前を指定して参照するので圧縮・難読化で消えたり名前が変わってたりする とアクセスできない 保持する必要のある API に対する設定を keep rules に追加する できるだけ対象を特定して、保持する範囲を絞るようにする より R8 フレンドリーなライブラリに移行できないか検討する 参考) Choose libraries wisely: https://developer.android.com/topic/performance/app-optimization/chooselibraries-wisely © 2026 ANDPAD All Rights Reserved. 19
GSON を避ける GSON は reflection は reflection を多用しているので R8 のための設定を利用者側で行わな
ければならない 前ページで紹介したドキュメントや R8 の repository 内にある FAQ で言及されている https://r8.googlesource.com/r8/+/refs/heads/master/compatibility-faq.md GSON 自身も Android 向けには not recommended と言っている https://github.com/google/gson/blob/main/README.md Kotlin Serialization や Moshi の codegen に置き換えることを検討しよう ANDPAD は Kotlin Serialization へ移行中 GSON を使い続ける場合は 2.11.0 以上を使い、各 field への @SerializedName の指定を必ず つけること https://github.com/google/gson/releases#release-gson-parent-2.11.0 © 2026 ANDPAD All Rights Reserved. 20
After © 2026 ANDPAD All Rights Reserved. 21
© 2026 ANDPAD All Rights Reserved. 22
© 2026 ANDPAD All Rights Reserved. 23
設定見直し後 3項目の達成率: 0-11% => 72-73% DEX ファイル数: 14 => 4
Code / DEX のサイズ: 64%削減 アプリサイズ (ダウンロードサイズ): 25%削減 ネイティブライブラリの比率が結構高く、全体で見るとそんなに減らなかった © 2026 ANDPAD All Rights Reserved. 24
あなたと R8, 今すぐ最適化 Android Developers の R8 のドキュメントを読もう https://developer.android.com/topic/performance/appoptimization/enable-app-optimization R8
configuration analyzer を活用しよう (AGP 9.3.0 から) https://developer.android.com/topic/performance/app-optimization/r8configuration-analyzer Android CLI から skill として呼び出せる 普段から minify したビルドを作って動かせる環境を用意しておくと便利 © 2026 ANDPAD All Rights Reserved. 25
Thank you © 2026 ANDPAD All Rights Reserved. 26