2017-07-31 3 views
0

C'est la première fois que j'utilise proguard. Je suis capable d'obscurcir presque tout dans mon apk. Mais les noms de chaînes et de classes ne sont pas obfusqués. Comment puis-je m'assurer que les noms de classe sont obfusqués dans mon apk.Proguard n'obstruant pas les noms de chaînes et de classes

Voici mon proguard-rule.pro

-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(...); 
} 
-dontwarn org.androidannotations.api.rest.** 
-keep class com.github.mikephil.charting.** { *; } 
-dontwarn android.support.v7.** 
-keep class android.support.v7.** { *; } 
-keep interface android.support.v7.** { *; } 
-dontwarn com.squareup.okhttp.** 
-keep public class * implements com.bumptech.glide.module.GlideModule 
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { 
    **[] $VALUES; 
    public *; 
} 

Ceci est mon fichier build.gradle:

android { 
    compileSdkVersion 25 
    buildToolsVersion '25.0.2' 

    defaultConfig { 
     applicationId "com.ignite.tsa" 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     debug { 
     } 
    } 
    dexOptions { 
     preDexLibraries = false 
     javaMaxHeapSize "4g" // 2g should be also OK 
    } 
} 

Qu'est-ce que je fais mal? Quelqu'un peut-il fournir un fichier proguard-rule.pro approprié pour obfusciter le AppCompat et d'autres bibliothèques android présents.

+1

Vous dites que "certaines parties ne sont pas obfusquées", mais nous ne savons pas ce qu'est la "certaine partie". – CommonsWare

+1

Vous devez clarifier ce que vous attendez d'être obfusqué mais ce n'est pas le cas. Certaines choses doivent être non obfusquées pour Android au travail. – Kiskae

+0

Je suis capable de voir la structure de l'emballage. Je suis capable de voir les fichiers 'appcompat' facilement et d'autres bibliothèques. – XoXo

Répondre

1

Je suis en mesure de voir les fichiers appcompat facilement

Oui, bien sûr. Vous avez tapé dans votre ProGuard règles que les lignes suivantes:

-keep class android.support.v7.** { *; } 
-keep interface android.support.v7.** { *; } 

Si vous voulez des cours dans android.support.v7 à brouillées (et retirées si elles ne sont pas utilisées), vous devez vous débarrasser de ces lignes, ou les remplacer par quelque chose qui est mieux adapté pour indiquer spécifiquement ce que vous voulez garder.

+0

Je veux obscurcir mes noms de classe Activity, BroadcastReceiver, Service et Fragment. La plupart du temps j'ai besoin d'obfuscation de corde et de classe. – XoXo

+1

@Hiren: ProGuard ne peut pas faire cela, car ces classes sont toutes instanciées par réflexion. Il est possible qu'un obfuscateur commercial (par exemple, DexGuard) puisse gérer cela. Personnellement, je pense que vous perdez votre temps. – CommonsWare

+0

Merci beaucoup pour votre précieuse réponse. – XoXo