2015-10-15 10 views
10

Sto sviluppando l'SDK, il mio ambiente ha la libreria SDK e un progetto di test che lo usa.Android come posizionare tutte le mie classi in un pacchetto usando Proguard

Voglio proteggere il mio codice libreria dagli utenti della mia libreria e lì perché ho bisogno di offuscarlo, ma proprio questo.

Così in Android Studio nel mio modulo di libreria, nel file di proguard-rules.pro ho aggiunto il prossimo script:

-dontpreverify 
-optimizations !code/simplification/arithmetic 

-keep class !com.example.**{ *; } 
-keep public class com.example.sdk.Example{*;} 
-keep public class com.example.sdk.IExampleCallback{*;} 
-keep public class com.example.sdk.ui.ExampleActivity 

-dontwarn android.util.Log 

-repackageclasses 'com.example.security' 
-allowaccessmodification 

Le classi vengono offuscati, ma il loro pacchetto non è cambiato. Ho incassato Eric Lafortune (l'autore di Proguard) suggerimento di aggiungere allowaccessmodification, ma non ha aiutato. Cerco anche di usare flattenpackagehierarchy, ma non ha avuto alcun effetto.

Aiutami, come inserire tutte le mie lezioni in un unico pacchetto?

risposta

7

risolto: Dopo aver aggiunto queste righe ha fatto il lavoro

-useuniqueclassmembernames 
-keeppackagenames doNotKeepAThing 

Questo è il mio script completo

-optimizationpasses 30 
-mergeinterfacesaggressively 
-dontpreverify 
-optimizations !code/simplification/arithmetic 

-repackageclasses 'com.example' 
-allowaccessmodification 
-useuniqueclassmembernames 
-keeppackagenames doNotKeepAThing 

-keep class !com.example.**{ *; } 
-keep public class com.sdk.example{ 
    *; 
} 
-keep public class com.sdk.IExampleCallback{ 
    *; 
} 
-keepclasseswithmembernames public class com.sdk.ui.activity.ExampleActivity{ 
    public <methods>; 
    protected <methods>; 
} 
-keepclasseswithmembernames public class com.example.sdk.ExampleReciever{ 
    public <methods>; 
} 

-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    public static int e(...); 
}