2013-11-22 16 views
5

Ho creato un nuovo progetto in Android Studio e sto usando Gradle per costruirlo.Nota Proguard per classe sconosciuta "Oggetto" con Android Studio e Gradle

Ho aggiunto la mia integrazione Proguard per build di rilascio, e sto vedendo questa nota ogni volta che eseguo il mio assembleRelease passo:

Note: the configuration refers to the unknown class 'Object' 
     Maybe you meant the fully qualified name 'java.lang.Object'? 

Nessuno dei miei file di configurazione Proguard, o quelli in Android SDK cartella include un nome non qualificato Object.

mio build.gradle include:

buildTypes { 
    release { 
     runProguard true 
     proguardFile 'proguard-project.txt' 
     proguardFile getDefaultProguardFile('proguard-android-optimize.txt') 

     signingConfig signingConfigs.release 
    } 
} 

ho anche vedere la stessa nota quando rimuovo entrambe le proguardFile linee di cui sopra, e anche se elimino le mie regole Proguard personalizzati (ogni volta che fa un pulito prima ricostruzione).

Suppongo che questo sia un problema benigno con il plugin Proguard per Gradle?

risposta

11

Grazie per il suggerimento Eric Lafortune! L'aggiunta di -printconfiguration al mio proguard.txt ha rivelato che il problema era nella pagina google-play-services_lib (r13).

La regola Proguard colpevole è (dovrebbe essere java.lang.Object[][]):

-keep class * extends java.util.ListResourceBundle { 
    protected Object[][] getContents(); 
} 

Si può vedere questo su un Mac facendo clic destro su Android Studio, fare Show Package Contents, quindi individuare sdk/extras/google/google_play_services/libproject/google-play-services_lib/proguard.txt.

La soluzione più rapida consiste nell'aggiungere la regola Proguard corretta nella propria configurazione Proguard e ignorare semplicemente la nota Proguard.

-keep class * extends java.util.ListResourceBundle { 
    protected java.lang.Object[][] getContents(); 
} 

Ho sollevato questo bug con Google come Android Issue #63095.

+1

Ho aggiunto la regola ma continua a lamentarsi. Immagino che questo accada perché la vecchia regola è ancora appesa nel file di configurazione dopo la mia stessa regola. C'è un modo per aggirare questo? – sttaq

5

Non sono a conoscenza di alcun riferimento non qualificato a Object nell'SDK di Android, ma è possibile specificare l'opzione -printconfiguration config.txt per scrivere la configurazione completa e cercare il riferimento. Potrebbe essere un argomento di metodo o un valore di ritorno, che è facile da trascurare.

+0

Dove/come si specifica questa opzione? Come parte di quale comando ?? E contro quale file txt ??? –

+0

Ho provato ad aggiungere '-printconfiguration config.txt' a uno dei file delle regole proguard nel mio progetto ma quando ho creato la mia app ho ricevuto questo messaggio di errore:' Flag -printconfiguration config.txt non è supportato dal shrinker incorporato. –

Problemi correlati