ProGuardとLogCatとAdMobが織りなす罠

  • 15
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

アンドロイド開発においてログを吐く事は保守性が良くなるが、実際にこのコードを放置するとアプリケーションのパフォーマンスも落ちるし情報もだだ漏れ。

そのため存続のコードではガシガシログを吐いてリリースビルドでLogCatを吐かないようにProGuardで

-assumenosideeffects class android.util.Log { <methods>; }

とやるとログを吐かなくなる。

が、これが落とし穴だった。

これをするとAdMobが常にネットワークエラーだと言い出す。
これはSDKをデコンパイルしてみて見るとLog.isLoggableの戻り値を利用しているからだと解った。

すでに難読化されたクローズドソースなので分かりづらいクラス名だが、
com.google.ads.utilのパッケージ中のaとbというクラスで使われている。

-assumenosideeffects class android.util.Log {
public static *** v(...);
public static *** d(...);
public static *** i(...);
public static *** w(...);
public static *** e(...);
}

とすればモーマンタイ。