2011-11-10 6 views
12

¿Cómo puedo abordar las advertencias?Proguard me dice 'Corrija primero las advertencias anteriores'. ¿Cómo abordar las referencias de jarras externas?

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

Aquí está el Android Ant Construir con Proguard registro de la consola Habilitado. Por favor, consulte el enlace de ant build console log

Aquí está mi build.xml (básicamente es el guión original de hormiga androide). Por favor, consulte el enlace de 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 

Mi disculpa por la publicación larga. Cualquier orientación en la dirección correcta es apreciada.

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> 

Respuesta

21

Hay que tranquilizar a ProGuard que algunas construcciones sospechosas en los frascos de entrada están bien.

El código del programa contiene copias o mejores versiones de las clases de tiempo de ejecución de Android en el paquete org.xmlpull.v1. Si eso está bien:

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

Su código de programa contiene copias de clases de tiempo de ejecución de Android en org.apache.http. Si eso está bien:

-dontnote org.apache.http.** 

Su código de programa en los ejemplos de paquetes se refiere a AWT, que no existe en Android. Si eso está bien:

-dontwarn java.awt.** 

Su conductor PostgreSQL se refiere a muchas clases javax que no existen en Android. Si eso está bien:

-dontwarn org.postgresql.** 

Y así sucesivamente ...

Cfr.Manual ProGuard>Troubleshooting

Por último, la configuración especifica -keep public class !testAppH23.** { *;}, que mantiene todas las clases públicas, excepto los de testAppH23 y sus miembros públicos/protegido/privados de clase, de ser encogido/optimizado/ofuscado. Esto puede causar algunas notas (inofensivas) sobre las clases de descriptores. Para mayor coherencia, es posible que desee eliminar "público" para las clases o agregar "público protegido" para los miembros de la clase.

+1

En mi caso, cuando agregué Dropbox jar y Google Drive jar me ayudó simplemente agregar -dontwarn org.apache. ** y -dontwarn com.google.android.gms. ** (además de proguard-google- api-client.txt agregado automáticamente por el complemento de Google Eclipse). No fue necesario agregar la declaración -dontnote. Probablemente porque todas las advertencias desaparecieron y no había ninguna razón para "notar" ningún problema. Gracias por tu publicación. – petrsyn

Cuestiones relacionadas