Configurare proguard per escludere libreria jar che si estende android.contenuto.Contesto

Sto integrando una libreria in un dispositivo per un progetto che sta per essere integrato nel dispositivo OS. Per questo, stiamo integrando una libreria jar che sostituisce il framework Android Contesto.

A causa di questo, cercando di abilitare il Proguard per l’applicazione mi da il seguente errore – “ci sono state 220 le istanze di libreria di classi a seconda del programma di classi”.

Tutti questi file sono i Widget e i punti di Vista. Come posso risolvere questo problema?

Questo è il contenuto del mio proguard-project.txt

-injars      bin/classes
-outjars     bin/classes-processed.jar
-libraryjars /Users/me/android-sdk-mac_86/platforms/android-15/android.jar
-libraryjars libs/library-that-overrides-context.jar

-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.content.Context

Questo è il contenuto del mio proguard-android.txt

# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file.

-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
    native <methods>;
}

# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}

# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

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

-keepclassmembers class **.R$* {
    public static <fields>;
}

# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
-dontwarn android.support.**
È che un crash ? quindi il post completo stacktrace che renderà più seance
No, questi sono avvisi. Se io utilizzo dontwarn, l’apk è formato, ma per installarla sul dispositivo, non riesco a legna…
Non importa.. ho trovato la risposta qui: stackoverflow.com/questions/6542631/…
Per riferimento futuro, ho dovuto aggiungere la linea di mantenere la classe android.content.** { *; } al mio proguard-project.txt

OriginaleL’autore Vinay S Shenoy | 2013-04-25

2 risposte

  1. 0

    Android Ant/Eclipse costruisce automaticamente specificare tutto il necessario -injars/-outjars/-libraryjars opzioni per voi. Si deve solo specificare queste opzioni se si dispone di una versione personalizzata del processo. In caso contrario, si otterrà un sacco di avvertimenti circa duplicati classi e, eventualmente, altri problemi.

    Se hai bisogno di specificare -injars/-outjars/-libraryjars opzioni, le classi specificato con l’opzione-injars può dipendere classi specificate con -libraryjars, ma non l’altro senso intorno. Cfr. ProGuard manuale > Risoluzione dei problemi > Avviso: la biblioteca di classe … dipende dal programma di classe …

    Sì, lo so questo. Ma il mio progetto non è una normale applicazione per Android, come ho detto. Dispone di una libreria che sostituisce il contesto di sistema e a causa di questo, era causa di problemi. Ho dovuto risolvere il problema, specificando —keep class android.content.** { *; } nel mio progetto specifico proguard file

    OriginaleL’autore Eric Lafortune

  2. 0

    Anche se avrei segnato la mia libreria come libraryjar, ho dovuto aggiungere anche le linee

    -keep public class android.content.** { *; } al progetto proguard file di configurazione per risolvere i problemi.

    OriginaleL’autore Vinay S Shenoy

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *