2013-06-11 11 views
8

Sto usando ProGuard per offuscare il mio apk, ma non ci sono cambiamenti nei nomi di classi e metodi - sono gli stessi di prima. Solo i nomi delle variabili sono cambiati.Come dire a ProGuard di offuscare i nomi dei metodi e delle classi?

La maggior parte di esse non estende le classi come Attività; c'è dell'eredità nel mio codice, ma è scritta al 100% da me stesso.

Sto usando d2j-dex2jar e jd-gui per verificare i risultati.

Alcune classi sono esclusi a causa di utilizzo GSON, ecco la mia Proguard-project.txt:

-keep class com.google.ads.** # Don't proguard AdMob classes 
-dontwarn com.google.ads.** # Temporary workaround for v6.2.1. It gives a warning that you can ignore 

# Add any classes the interact with gson 
-keep class com.revicostudio.gravityrun.playerdata.PlayerData 
-keep class com.revicostudio.gravityrun.playerdata.SettingsDescriptor 
-keep class com.revicostudio.gravityrun.playerdata.ShipStatus 
-keep class com.revicostudio.gravityrun.descriptors.ShipDescriptor 
-keep class com.revicostudio.gravityrun.descriptors.Ships 
-keep class com.revicostudio.gravityrun.game.galaxies.Galaxies 

-keep public class com.badlogic.** {*;} 



##---------------Begin: proguard configuration common for all Android apps ---------- 
-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-dontpreverify 
-verbose 
-dump class_files.txt 
-printseeds seeds.txt 
-printusage unused.txt 
-printmapping mapping.txt 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-allowaccessmodification 
-keepattributes *Annotation* 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 
-repackageclasses '' 

-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 
-dontnote com.android.vending.licensing.ILicensingService 

# Explicitly preserve all serialization members. The Serializable interface 
# is only a marker interface, so it wouldn't save them. 
-keepclassmembers class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

# Preserve all native method names and the names of their classes. 
-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

# Preserve static fields of inner classes of R classes that might be accessed 
# through introspection. 
-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

# Preserve the special static methods that are required in all enumeration classes. 
-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep public class * { 
    public protected *; 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 
##---------------End: proguard configuration common for all Android apps ---------- 

##---------------Begin: proguard configuration for Gson ---------- 
# Gson uses generic type information stored in a class file when working with fields. Proguard 
# removes such information by default, so configure it to keep all of it. 
-keepattributes Signature 

# For using GSON @Expose annotation 
-keepattributes *Annotation* 

# Gson specific classes 
-keep class sun.misc.Unsafe { *; } 
#-keep class com.google.gson.stream.** { *; } 

# Application classes that will be serialized/deserialized over Gson 
-keep class com.google.gson.examples.android.model.** { *; } 

##---------------End: proguard configuration for Gson ---------- 
+0

hai abilitato proguard in modalità di rilascio ?. Puoi anche estrarre i file da apk e controllare se i tuoi file java sono offuscati – Raghunandan

+1

sto indovinando sì, perché ci sono nomi di variabili offuscati, quindi proguard è in esecuzione –

risposta

7

Se avete questo problema con i componenti (Attività, Servizi o BroadcastReceivers) Classi allora questo è OK.

Proguard non annulla i nomi dei componenti.


E se sta assumendo sulle classi definiti come

-keep class com.revicostudio.gravityrun.playerdata.PlayerData 
-keep class com.revicostudio.gravityrun.playerdata.SettingsDescriptor 
-keep class com.revicostudio.gravityrun.playerdata.ShipStatus 
-keep class com.revicostudio.gravityrun.descriptors.ShipDescriptor 
-keep class com.revicostudio.gravityrun.descriptors.Ships 
-keep class com.revicostudio.gravityrun.game.galaxies.Galaxies 

anche il loro nome non può essere modificato, a causa di keep opzione.


Fai una prova con la rimozione -keep public class * { public protected *; } linea

+0

C'è un'attività per AndEngine, ed è quasi tutto. Il resto delle classi è personalizzato al 100%. –

+0

@AdrianAdamczyk vedere la mia modifica ... ho ragione fino ad ora? –

+0

Queste classi non possono essere offuscate a causa della serializzazione di GSON, ma ci sono molte altre classi che dovrebbero essere offuscate e non lo sono - quelle che contengono la parte logica del gioco –

2

Qualche tempo il nome della classe offuscamento non funzionano causa di "butterknife" Quindi aggiungere di seguito le regole nel file Proguard.

# Butterknife 
-dontwarn butterknife.internal.** 
-keep class butterknife.** { *; } 
-keep class **$$ViewInjector { *; } 
-keepclasseswithmembernames class * { 
    @butterknife.InjectView <fields>; 
} 
-keepclasseswithmembernames class * { 
    @butterknife.OnClick <methods>; 
    @butterknife.OnEditorAction <methods>; 
    @butterknife.OnItemClick <methods>; 
    @butterknife.OnItemLongClick <methods>; 
    @butterknife.OnLongClick <methods>; 
} 

NOTA: utilizzare le regole precedenti solo quando si utilizza "butterknife".

vecchie istruzioni
1

di butterknife definito codice per Proguard provoca questo problema, se si utilizza butterknife e una versione precedente come la versione 7, assicurarsi che non si dispone di questa linea nelle regole proguared

-keepnames class * { @butterknife.Bind *;} 

Questo è facendo sì che tutti i nomi delle classi non vengano oscurati.

Utilizzare sotto configurazione per butterknife, è migliore e prova futura confrontare con un altro suggerimento.

# ButterKnife 
-keep class butterknife.** { *; } 
-dontwarn butterknife.internal.** 
-keep class **$$ViewBinder { *; } 

-keepclasseswithmembernames class * { 
    @butterknife.* <fields>; 
} 

-keepclasseswithmembernames class * { 
    @butterknife.* <methods>; 
} 
Problemi correlati