web-dev-qa-db-ja.com

Proguardで外部ライブラリを無視する方法は?

主に難読化のためにProguardを使用したい。

私の問題は、3つのライブラリ、Twitter4Jと2つの標識ライブラリがあることです。これらのライブラリは、署名済みAPKを作成しようとしたときにエラーを引き起こしました。これを乗り越えるために、以下をproguard.configファイルに入れます...

-dontwarn org.Apache.commons.codec.binary.** 
-dontwarn org.slf4j.** 
-dontwarn com.Sun.syndication.io.**
-dontwarn com.Sun.syndication.feed.synd.*   

これはコンソールのエラーを取り除きましたが、署名したAPKを携帯電話にロードすると、すぐにクラッシュしました。 DDMSは、これはTwitter4Jにないクラスによるものだと述べました。

上記の"dontwarns"を削除しても解決しませんでした。 dontshrink dontoptimiseも追加しませんでした。

Proguardがライブラリを完全に無視するようにしたい(とにかくオープンソースであるため)。これは可能ですか?

45
Mel

これを試して:

-keep class javax.** { *; }
-keep class org.** { *; }
-keep class Twitter4j.** { *; }

@CaspNZからのCf投稿: 外部jarを使用したAndroid Proguard

59
Murphy

パッケージ(およびサブパッケージ)内のすべてのクラスを除外するには、proguard.cfgに次の行を追加できる必要があります。

-keep class org.Apache.commons.codec.binary.**
-keep interface org.Apache.commons.codec.binary.**
-keep enum org.Apache.commons.codec.binary.**
-keep class org.slf4j.**
-keep interface org.slf4j.**
-keep enum org.slf4j.**
-keep class com.Sun.syndication.io.**
-keep interface com.Sun.syndication.io.**
-keep enum com.Sun.syndication.io.**
-keep class com.Sun.syndication.feed.synd.**
-keep interface com.Sun.syndication.feed.synd.**
-keep enum com.Sun.syndication.feed.synd.**
10
Nic Strong

プロガードルールを追加した後、プロジェクトをGradleファイルと同期する必要があります。そうしないと、プロジェクトが機能しない場合があります。

0
urgentx