タグ

ProGuardに関するcrafのブックマーク (10)

  • R8/Proguard: JarファイルからProGuard設定ファイルを読み込んでくれるようになりました

    R8/Proguard: JarファイルからProGuard設定ファイルを読み込んでくれるようになりました Updated at Mon, Jan 28, 2019 AGP3.3.0ProGuardはAGP3.3.0、R8は導入されたAGP3.2.0から、JarファイルのProGuard設定ファイルを組み込めるようになりました。その機能紹介です。 今まで、aarではconsumerProguardFilesで、ライブラリのProGuard設定を指定できました。それのJar、Javaバージョンとなります。 ライブラリ開発者側の設定 RetrofitなどのSquare社のライブラリでは、早くもこの機能に対応しているので、それを例にして説明します。 まず、resources/META-INF/prougardディレクトリの中にProGuardの設定ファイルを置きます。 square/retrof

  • ProGuardによるクラッシュ・不具合を正しく回避する - Qiita

    ProGuardを使うとアプリを小さくしたり解読を難しくしたりと、リリースする際には必須のメリットを享受することができます。しかし、ProGuardを有効にしたリリースビルドを起動した途端クラッシュするとかリクエストがコケるとか、そういった現象にぶち当たった人は少なくないのではないでしょうか。ProGuardの仕組みを把握してprogurad-rules.txtに適切なルールを書き足せばこれらのクラッシュは回避できます。 ProGuardはそもそも何をするのか アプリケーションとライブラリのclassファイルを解析し、 誰からも呼び出されていないクラスとクラスメンバ(メソッド、フィールド)や、各種メタデータを削除するなどしてバイナリサイズを小さくします(シュリンク) バイトコードレベルの最適化を実施し、その結果不要になったクラスメンバなどを削除します リネームしても問題ない要素をリネームし

    ProGuardによるクラッシュ・不具合を正しく回避する - Qiita
  • -assumenosideeffects class android.util.Log { <methods>; } は使っちゃダメ - Qiita

    -assumenosideeffects class android.util.Log { <methods>; } は使っちゃダメProguard この設定をすると、Logクラスのメソッドすべてが副作用がないものとして扱われます。すべてのメソッドとは、継承元のメソッドも含みます。 その結果 Object#wait() なども副作用なしとしてdead code eliminationの対象になり、すべての Object#wait() が素通りするようになります。 これを防ぐためには下記のように <methods> じゃなく個別に指定しないといけません。

    -assumenosideeffects class android.util.Log { <methods>; } は使っちゃダメ - Qiita
  • Proguard ate my Object.wait()

    I just found that ProGuard removed a .wait() call which I used to synchronize threads, which lead to a race condition which lead to a day of happy debugging :) Anyway... I tracked it down to following piece of proguard configuration: -assumenosideeffects public class android.util.Log { <methods>; } I want to understand WHY this happened. I am not sure why assuming that removal of Log class has no

    Proguard ate my Object.wait()
  • proguardの設定をCLIから追加できるGradleプラグイン書いた - ギークに憧れて

    2015-02-01 proguardの設定をCLIから追加できるGradleプラグイン書いた hotchemi/gradle-proguard-plugin 表題通りのGradle Pluginを書いた. 詳しい使い方はREADMEに書いてあるのでそちらを参照して欲しい. ハンズオンを撮影したのでこれを見ればどういうのか分かる. なぜ作ったのか Androidにはproguardという仕組みがあり、ソースコードの難読化や最適化を行ってくれる. defautの設定だとリフレクションを使っている箇所やAnnotation Processingをしている様な実装は参照なしと見なされてソースコードから消されるので、それを防ぐ為に記述を追加しないといけない. 例えばAndroidに最適化されたEventBus実装であるOttoは以下の様な記述を必要とする. -keepattributes *Ann

    proguardの設定をCLIから追加できるGradleプラグイン書いた - ギークに憧れて
  • ProGuardマニュアル (1) はじめに/利用方法 - M12i.

    ScalaAndroidについて調べるなかで、ProGuardというキーワードを目にする機会がありました。 意識して頻繁に使用する機会はなさそうですが、概略くらいはかるーく知っておきたいなー、ということで、例によって公式サイトのドキュメントを見てみました。 原文は、“ProGuard Manual”(Eric Lafortune)です(2011年3月29日取得)。 ****************************** はじめに ProGuardは、Javaクラスファイルのダウンサイジング*1、最適化、難読化そして事前検証を行うツールです。ダウンサイジングのステップでは、使用されていないクラス、フィールド、メソッドと属性を検出し削除します。最適化のステップでは、メソッドのバイトコードを解析し、最適化していきます。難読化ステップでは、残っているクラスとそのフィールドとメソッドを、短い

    ProGuardマニュアル (1) はじめに/利用方法 - M12i.
  • Proguard を利用してリリース apk からログ出力をストリップする方法 & ベンチマークをとってみた - sandbox

    はじめに 皆さんは Android アプリにログ出力をどの程度仕込んでいるでしょうか。 適切にログ出力が施されたアプリは、問題追跡がしやすいですし、あの糞重いデバッガを起動しなくて済む事が多いです。 個人的には、verbose or debug レベルでは、ふんだんにログ出力を仕込みたいと考えていますが、あまりログを仕込みたがらない人がいるのも事実です。 ログ出力普及委員会(会員1名)の市場調査結果では、その理由として大きく下記の2つがある様でした。 標準の Android Log の仕様上、リリースされた apk でもログがすべて参照できてしまう = 気軽に内部データのログ出力を書けない ログ出力によるパフォーマンスの低下の懸念 これらの問題へのソリューションとしてはいくつか方法がありますが、この記事では proguard を利用した下記の方法を検証してみました。 ログが見えてしまう →

    Proguard を利用してリリース apk からログ出力をストリップする方法 & ベンチマークをとってみた - sandbox
  • え、まさか難読化の為にわざわざproguard.cfgをいじってるんですか?

    ちょいAndroidTypescriptいいよ。JenkinsとかGradleとか。APTもいいなー。 photo by http://www.flickr.com/photos/jonnygoldstein/ 裏Android Advent Calendar 2011 12/18(日)担当の@sys1yagiです。 いきなりですがproguard.cfgをいじるのってクソめんどくせーわけですよ。何が悲しくてあんな意味不明なオプションの文法を毎回ググりながらsitと言いながら書かないといけないのか。ていうか複数人でやってたらproguard.cfgをいじるタイミングがさー色々面倒でもう最後にぱっと追加するかーとか皆思っちゃってて最後にカオスになったりして\(^o^)/とかさ、もっと簡単な方法はねーのかよ!?例えばアノテーションでさー、クラスのとこに書いたらさー、難読化されないとかさ。 あ

    え、まさか難読化の為にわざわざproguard.cfgをいじってるんですか?
  • Androidとセキュリティ:Android 2.3(Gingerbread) SDKに標準搭載されたProGuardを試す - Android(アンドロイド)情報-ブリリアントサービス

    はじめに 前回の記事ではAntを使う形で、難読化ツールであるProGuardの適用方法を紹介しました。*1 今回は日(日時間12/7)リリースされた Android 2.3(Gingerbread)のSDK(正確にはSDK Tools r8とADT8.0.0)に標準で搭載されたProGuardの適用方法について紹介します。 ProGuardとは 詳細は前回の記事を参照頂きたいのですが、ProGuardが初めての方の為に簡単に説明します。ProGuardはソースコードをコンパイルする際に処理を最適化したり、プログラム中の変数やメソッドを意味のない文字列に置き換え、逆コンパイルされた際に処理の中身をわかりにくくする、いわゆる「難読化」を行うツールです。 これまでもAntを使ってProGuardの適用は行えましたが、最新のSDKでは標準搭載され、Eclipse上から簡単に難読化が行えるように

    Androidとセキュリティ:Android 2.3(Gingerbread) SDKに標準搭載されたProGuardを試す - Android(アンドロイド)情報-ブリリアントサービス
  • Android Eclipse から ProGuard を使ってみた。

    proGuard を訳そうかな、と思ったんだけど、 AndroidセキュリティAndroid 2.3(Gingerbread) SDKに標準搭載されたProGuardを試す - Android(アンドロイド)情報-ブリリアントサービス - によくまとまっていたので、補足的な感じにしました。 この機能を使うには ADT8.0.0 以上 + SDK Tools, r8 が必要です ■ proguard.cfg を作成 プロジェクトを作成するとこんな感じでホーム直下に proguard.cfg が自動で作成されます。 中にはデフォルトの設定が入っています。 ■ default.properties の設定 この proguard.cfg へのパスを default.properties に追加します。 構文は proguard.config=/path/to/proguard.cfg 絶対パ

    Android Eclipse から ProGuard を使ってみた。
  • 1