Androidのメソッド数を測定する

この記事は公開されてから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を有効に使いましょう!