この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Androidは65536メソッドを超えるとエラーでビルドができなくなります。
multidexを使えば、制限を超えることができるが、
ビルド時間が遅くなり、アプリ起動なども遅くなる。
multidex
https://github.com/casidiablo/multidex
multidexは最終手段で使うとして
どれがどのくらいメソッドを持っているのか調査できなければ、改善ができせん。
まずは、何のパッケージがメソッドが多いか数えてみよう。
dex-method-counts
dex-method-counts
https://github.com/mihaip/dex-method-counts
dex-method-countsを使えば、アンドロイドのメソッドを測定することができます。
install
手元の環境は、Mac: OSX どのOSでも動くと思います。
1.dex-method-countsをダウンロードする
Githubから、ダウンロードしてくる
https://github.com/mihaip/dex-method-counts
2.ターミナルからassembleする
git bashなどのターミナルから、以下のコマンドを叩く
./gradlew assemble
以上です。
dex-method-countsができているので、/usr/local/binなどにいれていつでも使えるようにしとくと便利です。
試してみる
Androidでビルドしてメソッド数を測定してみる。
以下は、new projectから、emptyで作ったアプリです。
Android Studioのrunなどでapkを作り、実際に測定する。
apkは以下のディレクトリに作られます。
./app/build/outputs/apk/
$ dex-method-counts app/build/outputs/apk/app-debug.apk
Processing app/build/outputs/apk/app-debug.apk
Read in 16276 method IDs.
<root>: 16276
<default>: 1
android: 15894
accessibilityservice: 6
animation: 20
app: 186
content: 244
pm: 22
res: 94
database: 29
graphics: 243
drawable: 90
shapes: 2
pdf: 3
hardware: 14
display: 3
fingerprint: 11
location: 5
media: 181
browse: 17
session: 87
net: 32
os: 154
print: 23
pdf: 5
provider: 9
speech: 6
tts: 6
support: 13347
annotation: 20
graphics: 303
drawable: 303
animated: 1
v4: 9010
accessibilityservice: 41
animation: 62
app: 1623
content: 293
pm: 1
res: 20
database: 3
graphics: 316
drawable: 261
hardware: 85
display: 19
fingerprint: 66
internal: 74
view: 74
media: 1463
session: 818
net: 64
os: 68
print: 84
provider: 96
speech: 14
tts: 14
text: 103
util: 283
view: 2935
accessibility: 1116
animation: 29
widget: 1402
v7: 4014
app: 965
appcompat: 15
graphics: 69
drawable: 69
text: 3
transition: 2
view: 743
menu: 587
widget: 2217
text: 34
method: 3
style: 2
transition: 17
util: 35
view: 840
accessibility: 213
animation: 32
inputmethod: 2
webkit: 3
widget: 466
com: 20
example: 20
kameihidetoshi: 20
sample: 20
java: 348
io: 45
lang: 173
ref: 2
reflect: 16
math: 1
nio: 1
text: 2
util: 126
concurrent: 22
atomic: 5
org: 12
xmlpull: 12
v1: 12
Overall method count: 16276
ひと目でメソッド数がわかります。
ライブラリーを追加した時などにみてみると良いと思います。
アンドロイド(v23)+com.android.support:appcompat-v7で16276メソッド。
残り65536-16276=49260を有効に使いましょう!