2012-05-08 15 views
6

Vorrei che il proguard offuscasse i nomi di classe. Ho questa linea in Proguard.cfgCome dire a Proguard di offuscare i nomi delle classi

-keepclasseswithmembers class * { 
public static <fields>; 
} 

-keepnames class * implements java.io.Serializable 
-keep public class com.google.** 

E noto che ciò che non è offuscato sono i nomi delle classi. Così in esecuzione jdgui vedo com/test/abcd/ActualClass.java public class ActualClassName estende attività ecc

inoltre vedo metodi di tornare classnames reali. come

ActualClassname aa(); 

e importa dichiarazioni come

import com.abcd.ActualClassName 

Come faccio ad avere Proguard per offuscare il nome della classe stessa. Non è solo per le attività che vedo che i miei adattatori non vengono offuscati. Beh, c'è l'oscuramento in corso ma non i nomi delle classi.

Le regole precedenti impediscono che i nomi delle classi vengano offuscati?

Aggiornamento: ho rimosso le regole precedenti e una classe di utilità che non estende nulla da Android non viene offuscata. Ora mi chiedo se ci sia qualche regola implicita sulla conservazione dei nomi delle classi delle classi a cui si fa riferimento da classi che vengono mantenute come classi di Derivaed di attività? Le classi i cui nomi non vengono offuscati hanno alcune cose in comune:

1) Metodi statici 2) Importazione di altri tipi che vengono mantenuti come quelli derivanti da attività o serializzabili. 3) Hanno metodi con parametri di altre classi (alcuni dei quali potrebbero dover essere mantenuti).

Tuttavia, non c'è dove io stia specificatamente chiedendo che queste classi di utilità debbano essere mantenute.

+0

Sono in esecuzione nello stesso problema. Hai trovato una soluzione a questo problema? – lnreddy

risposta

1

Penso che il tuo problema provenga dalla tua prima riga: '-keepclasseswithmembers' include il nome della classe, quindi nel tuo caso qualsiasi classe con un campo statico manterrà il suo nome. Cambiarlo in semplicemente '-keepclassmembers' nasconde i nomi delle classi lasciando intatti i campi statici (che presumo tu voglia fare).

Detto questo, non sono sicuro del perché tu voglia fare questo, però. Se stai cercando di preservare i nomi delle variabili statiche, non dovresti voler conservare anche i nomi delle classi, visto che in questo modo accederai ai campi statici? Perché stai cercando di conservare tutti i nomi delle variabili statiche?

+0

Ho rimosso quella linea. Ora vedo che viene mantenuta una classe di utilità che non si estende da qualsiasi cosa venga mantenuta. Viene semplicemente utilizzato dalle classi che vengono conservate e importate, ecc. –

+1

Hmm, puoi creare il tuo file .cfg completo? – alexc

3

Nel codice sono presenti diverse classi che devono conservare lo stesso nome di classe completo per consentire a di trovarle. Un esempio come sopra sono tutte le classi Activity, poiché sono definite nel manifest dal loro nome completo come String. Se dovessi rinominare la classe, Android non sarebbe più in grado di trovarli.

La tipica configurazione Proguard farà riferimento alla configurazione Proguard nel SDK di Android che comprenderà diverse linee importanti come questo:

-keep public class * extends android.app.Activity 
+0

Beh, sto vedendo che tutti i nomi delle classi vengono mantenuti. Da allora ho rimosso il -keepclasseswithmembers ma ho sempre lo stesso risultato? –

+0

Ad esempio, ho una classe di utilità e viene mantenuta. Quindi, forse c'è qualche regola implicita riguardo alla conservazione dei nomi delle classi che fanno riferimento ad altre classi o sono referenziati da altre classi –

+0

(semplicemente controllando i primi principi) nel tuo progetto Android, hai annullato la definizione per 'proguard.config' in' project.properties'? e qual è il valore? –

Problemi correlati