2011-11-10 6 views
12

Come posso indirizzare gli avvertimenti?Proguard mi dice 'Si prega di correggere prima gli avvertimenti sopra'. Come indirizzare i riferimenti di vasi esterni?

Log dice

[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 *; 
} 

Ecco l' Android Ant Costruire con Proguard log della console abilitato. Si prega di consultare il link ant build console log

Ecco il mio build.xml (in pratica il suo lo script ant originale Android). Si prega di consultare il link 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 

default.properties

target=android-7 

Le mie scuse per il post lungo. È gradita qualsiasi guida sulla giusta direzione.

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> 

risposta

21

Bisogna rassicurare ProGuard che alcuni costrutti sospetti nei vasi di ingresso sono ok.

Il codice del programma contiene copie o versioni migliori delle classi di runtime di Android nel pacchetto org.xmlpull.v1. Se ciò è ok:

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

Il codice del programma contiene copie delle classi di runtime Android in org.apache.http. Se è ok:

-dontnote org.apache.http.** 

Il codice del programma negli esempi di pacchetto si riferisce ad AWT, che non esiste in Android. Se questo è ok:

-dontwarn java.awt.** 

Il driver PostgreSQL si riferisce a molte classi javax che non esistono in Android. Se questo è ok:

-dontwarn org.postgresql.** 

E così via ...

Cfr.manuale ProGuard>Troubleshooting

Infine, la configurazione specifica -keep public class !testAppH23.** { *;}, che mantiene tutte le classi ad eccezione di quelli pubblici in testAppH23, ei loro membri pubblici/protette/private di classe, di essere ridotto/ottimizzato/offuscato. Ciò potrebbe causare alcune note (innocue) sulle classi di descrittori. Per coerenza, è possibile rimuovere "pubblico" per le classi o aggiungere "protetto pubblico" per i membri della classe.

+1

Nel mio caso, quando ho aggiunto i contenitori Dropbox e i contenitori Google Drive, è stato utile aggiungere semplicemente -dontwarn org.apache. ** e -dontwarn com.google.android.gms. ** (oltre a proguard-google- api-client.txt aggiunto automaticamente dal plug-in Eclipse di Google). Non è stato necessario aggiungere l'istruzione -dontnote. Probabilmente perché tutti gli avvertimenti sono scomparsi e non c'era motivo di "annotare" eventuali problemi. Grazie per il tuo post. – petrsyn

Problemi correlati