Androidのメソッド数を測定する
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を有効に使いましょう!