Android dexメソッド数の制限に対して実行されているアプリに取り組んでいます。メソッド数を表示する簡単な方法はありますかパッケージごとにグループ化?メソッドの合計数ですが、私のアプリには複数のコンポーネントがあり、どのコンポーネントがこれに最も貢献しているかを調べようとしています。
これにより、各パッケージ階層がメソッド数にどの程度貢献しているかがわかります。結果には、そのディレクトリ/パッケージ内のすべてのクラスとすべてのサブディレクトリ/パッケージが含まれます。
baksmali blah.apk -o out
cd out
find * -type d -print -exec sh -c "smali {} -o {}/classes.dex && sh -c \"dexdump -f {}/classes.dex | grep method_ids_size\"" \;
このわずかに変更されたバージョンは似ていますが、サブディレクトリやサブパッケージを含まず、特定のディレクトリ/パッケージ内のクラスのみを対象としています。
baksmali blah.apk -o out
cd out
find * -type d -print0 | xargs -0 -I{} sh -c "echo {} && find {} -maxdepth 1 -name \"*.smali\" -print0 | xargs -r -0 smali -o {}/classes.dex"
find -name "*.dex" -print -exec sh -c "dexdump -f {} | grep method_ids_size" \;
dex-method-counts
パッケージごとのメソッドを出力するツールは、JesusFrekeの回答で参照されているsmaliベースのツールよりも高速かつ正確にカウントされます¹。 https://github.com/mihaip/dex-method-counts からインストールできます。
[1]このスクリプトは.dexを逆アセンブルし、パッケージごとに再アセンブルしますが、これは、複数のパッケージによって参照されるメソッドが2回カウントされることを意味します
私と同僚が先月、あなたの目的に役立つサービス http://www.methodscount.com/ を公開しました。メソッド数とその他のきちんとした情報を表示します
内部では、gradlew
を使用して依存関係を取得し、 Android SDKツールdx
を使用してdex情報を計算します。プロシージャをライブラリとその依存関係に再帰的に適用します。また、すでに計算されたライブラリの結果を保持して、後続のリクエストのプロセスを高速化します。
Android StudioまたはIntelliJを使用する場合、 プラグインをインストール するだけで、すべての情報を手軽なヒントとして入手できます(プラグインもサービスを使用します)。
古い質問に重ねて、ビルドごとにAPKのメソッド数を報告するGradleプラグインを作成しました。 AOSPプロジェクトが使用するのと同じDEX解析コードを使用します。 https://github.com/KeepSafe/dexcount-gradle-plugin にあります。
上記のすべての開発者の仕事に感謝し、そのような素晴らしいコミュニティをいつも幸せに思っていますが、Android studio 2.2 GoogleチームがAPKアナライザをリリースして以来、> https:// developer .Android.com/studio/build/apk-analyzer.html
これで、メソッド数、リソースサイズを分析するためのツールがすべて組み込まれ、2つの.apkファイルを互いに比較することもできます。最後に、このツールがすべて組み込まれています。Android開発がますます簡単になっています。
ところで、あなたが持っているメソッドの数を見つけるには、Android Studio(2.2+のみサポート)で.apkファイルを開いて、classes.dexファイルをクリックしてください。その後、メソッドは、すべてのライブラリーおよびプロジェクトでもカウントされます。
https://github.com/KeepSafe/dexcount-gradle-plugin を使用して試すこともできます。これにより、HTMLを通じてパッケージごとのメソッド数をグラフィカルに確認できます。