20

警告に対処するにはどうすればよいですか?

ログは言う

 [proguard] Note: duplicate definition of library class...
 ...
 [proguard] Note: there were 370 duplicate class definitions.
 [proguard] Initializing...
 [proguard] Warning: abc.cba..: can't find superclass or interface xyz.zyx....
 ...
 [proguard] Note: the configuration refers to the unknown class 'android.app.backup.BackupAgentHelper'...
 ...
 [proguard] Warning: library class android.content.IntentFilter depends on program class org.xmlpull.v1.XmlSerializer...
 ...

proguard.cfg

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class !testAppH23.** { *; }

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

これは、 Proguard Enabled コンソール ログを使用した Android Ant ビルドです。 リンクant ビルド コンソール ログを参照してください。

これが私のbuild.xmlです(基本的にはAndroidのオリジナルのantスクリプトです)。リンクを参照してください TestAppH23 Android Ant Build With Proguard Enabled

local.properties

sdk.dir=C:\\androiddev\\android-sdk-windows

build.properties

proguard.config=proguard.cfg
key.store=testapph23-release.keystore
key.alias=alisname
key.store.password=storepassword
key.alias.password=aliaspassword

デフォルトのプロパティ

target=android-7

長文失礼しました。正しい方向へのガイダンスをいただければ幸いです。

UPDATES1 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="testAppH23.activity"
      android:versionCode="1"
      android:versionName="1.0">
    <application
        android:icon="@drawable/home"
        android:theme="@android:style/Theme.NoTitleBar"
        android:label="@string/app_name"
        >
        <activity
            android:name=".start.StartActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Translucent"
            android:screenOrientation="portrait"
            android:launchMode="singleTask"
            >
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN"
                    >
                </action>
                <category
                    android:name="android.intent.category.LAUNCHER"
                    >
                </category>
            </intent-filter>
        </activity>
        .....
        <service android:name="com.abc.myjar.papi.PIntentService"></service>

        <service android:name=".service.XyzService"></service>

    </application>


    <uses-library android:name="org.apache.http.entity"/>
    <uses-library android:name="org.apache.http.james.mime4j"/>

    <uses-permission android:name="android.permission...."/>

    <uses-sdk android:minSdkVersion="7" />

</manifest>
4

3 に答える 3

26

入力jar内のいくつかの疑わしい構成は問題ないことをProGuardに安心させる必要があります。

プログラムコードには、パッケージorg.xmlpull.v1にAndroidランタイムクラスのコピーまたはそれ以上のバージョンが含まれています。それでよければ:

-dontwarn org.xmlpull.v1.**
-dontnote org.xmlpull.v1.**

プログラムコードには、org.apache.httpにAndroidランタイムクラスのコピーが含まれています。それでよければ:

-dontnote org.apache.http.**

パッケージ例のプログラムコードは、Androidには存在しないAWTを参照しています。それでよければ:

-dontwarn java.awt.**

PostgreSQLドライバーは、Androidには存在しない多くのjavaxクラスを参照しています。それでよければ:

-dontwarn org.postgresql.**

等々...

Cfr。ProGuardマニュアル>トラブルシューティング

最後に、構成で指定します-keep public class !testAppH23.** { *;}。これにより、内のクラスを除くすべてのパブリッククラスtestAppH23、およびそれらのパブリック/保護/プライベートクラスメンバーが縮小/最適化/難読化されなくなります。これにより、記述子クラスに関するいくつかの(無害な)メモが発生する可能性があります。一貫性を保つために、クラスの「public」を削除するか、クラスメンバーの「publicprotected」を追加することをお勧めします。

于 2011-11-11T16:35:36.893 に答える