Android Lintはすぐ終わったので、Find Bugsに掛けることにした。
そうすると、ログ出力で文字列を足し算しているところに警告が出た。
StringBuilderとかがいいね、みたいなことを言っている。
うん、わかっているのだけど、ログ出すだけやん、とも思うのだ。
それに、最終的には出力されないし。
hiro99ma blog: [android]ProGuardでLog.d()がStringBuilderで残る
そういえば、ProGuardに掛けても文字列生成するところが残ってしまったのだが、もしかして最初からStringBuilder形式で書いておくと消してくれるのでは?
・・・ダメだった。
StringBuilderをnewして、append()して、最後にStringでnew(sb)したけど、全部残る。
しかも、以前は最適化してくれたせいかStringの足し算もStringBuilderに変換され、最後にStringに戻す部分がLod.d()がなくなることで不要になったのだけど、書き換えると明示的にStringBuilderからStringに変換する部分が残ってしまい、かえってコードが増えてしまっている。
だいたい、代入する人がいないのにnew StringBuilder()するところなんか、うまいこと消せないものなのだろうか。
C++だとできそうだけど、Javaはそういう書き方をすることが多いから無理か。。
とりあえず、こうしておこう。
- Log.d()程度の文字列操作で、ProGuardでログ自体削除するなら、文字列は足し算で結合させた方が最終的に小さくなりやすい
- StringBuilderからStringに変換する実装を明示的に書くと、それが残ってしまう
- 自作で、結合させたい文字列を引数に取るログ出力メソッドを作って、文字列の結合処理をメソッドの中に押し込め、ProGuardで抑止させれば消えるのかもしれん。
- Cなんかだとときどきある、DEBUG_LOG1(p1), DEBUG_LOG2(p1,p2)みたいに引数ごとにメソッドを作るとか
うーん、Javaにもプリプロセッサ、プリーズ!!
まあ、あったらあったでやっかいなのだけどね。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。