Google Play Services に含まれてるはずの〇〇クラスがどの aar に入ってるか調べる


背景

仕事で某 Android アプリをビルドして実行したところ com.google.android.gms.iid.InstanceID というクラスが見つからない的なエラーが出たので調べてみたところ、どうやらアプリに組み込まれてる play-services-*-*.*.*.aar が足りないっぽいのですが
どの aar に入ってるのかわからなかったので find してみました。

方法

※以下、コマンドラインは bash で書いてます。

まず、play-services-*-*.*.*.aar を適当なディレクトリにコピーします。

cp ${SDK_PATH}/extras/google/m2repository/com/google/android/gms/play-services-*/${PLAY_SERVICES_VERSION}/*.aar ~/hoge/
cd ~/hoge

次に、 aar を解凍します。
実態は zip なので unzip とか使えます。

find . -name "*.aar" -exec unzip \{\} -d \{\}.d \;

解凍すると、中からクラスファイルの入った classes.jar が出てくるので、これも解凍します。
これも実態は zip です。

find . -name classes.jar -exec unzip \{\} -d \{\}.j \;

あとは解凍されたファイルの中から目的のクラスを検索すれば見つかります。
今回の僕のケースでは InstanceID が欲しいので InstanceID.class を find します。

find *.d/*.j -name InstanceID.class

ありました!
僕の求めていた aar は play-services-iid でした。

play-services-iid-9.0.1.aar.d/classes.jar.j/com/google/android/gms/iid/InstanceID.class