2017-02-22 163 views
0

我正在使用各种其他库。但我已经从他们的存储库文档中添加了他们的proguard配置,我无法使用proguard来混淆我的代码和内部变量。即使我无法混淆软件包名称。我仍然能够看到我的android logcat上的日志。我的应用程序运行时没有任何崩溃。我很困惑缩小是否适用。混淆不适用于proguard

这是我的应用程序级gradle这个

defaultConfig { 
    resConfigs "en" 
    applicationId "com.xxx.xxx" 
    minSdkVersion 16 
    targetSdkVersion 25 
    versionCode 49 
    multiDexEnabled true 
    versionName "1.4.2-debug" 
} 
buildTypes { 
    debug { 
     minifyEnabled true 
     debuggable true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    release { 
     minifyEnabled true 
     debuggable true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     signingConfig signingConfigs.config 
    } 
} 
dexOptions { 
    javaMaxHeapSize "4g" 
} 

这是我ProGuard的规则文件。

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-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.view.View { 
public <init>(android.content.Context); 
public <init>(android.content.Context, android.util.AttributeSet); 
public <init>(android.content.Context, android.util.AttributeSet, int); 
public void set*(...); 
} 

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

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

-keepclassmembers class * implements android.os.Parcelable { 
static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
public static <fields>; 
} 
####################################################################  Fragmenst 

-keep public class * extends android.support.v4.app.Fragment 
-keep public class * extends android.app.Fragment 


#################################################################### Methods 

-keepclasseswithmembernames class * { 
native <methods>; 
} 
-keepclassmembers class * { 
public void *ButtonClicked(android.view.View); 
} 



#################################################################### Serializables 

-keepclassmembers class * implements java.io.Serializable { 
static final long serialVersionUID; 
private static final java.io.ObjectStreamField[]serialPersistentFields; 
!static !transient <fields>; 
!private <fields>; 
!private <methods>; 
private void writeObject(java.io.ObjectOutputStream); 
private void readObject(java.io.ObjectInputStream); 
java.lang.Object writeReplace(); 
java.lang.Object readResolve(); 
} 

#################################################################### KEEP ANDROID SUPPORT V7 AND DESIGN 

-dontwarn android.support.design.** 
-keep class android.support.design.** { *; } 
-keep interface android.support.design.** { *; } 
-keep public class android.support.design.R$* { *; } 

-keep public class android.support.v7.widget.** { *; } 
-keep public class android.support.v7.internal.widget.** { *; } 
-keep public class android.support.v7.internal.view.menu.** { *; } 

-keep public class * extends android.support.v4.view.ActionProvider { 
public <init>(android.content.Context); 
} 

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

#################################################################### REMOVE WARNINGS 


-dontwarn android.support.design.internal.** 
-dontwarn com.google.android.gms.** 
-dontwarn android.support.v4.** 


#################################################################### REMOVE LOGGING 

-assumenosideeffects class android.util.Log { 
public static *** e(...); 
public static *** w(...); 
public static *** wtf(...); 
public static *** d(...); 
public static *** v(...); 
public static *** i(...); 
} 

回答

2

I am not able to obfuscate my code and its inner variable using proguard

您的应用程序似乎不能混淆,因为你的progaurd规则过于宽泛,他们被阻止大部分代码从得到微细化以及模糊处理。例如下面的一行:

-keep public class * extends android.support.v4.app.Fragment 
-keep public class * extends android.app.Fragment 
-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 

I am still able to see logs on my android logcat

您必须从gradle这个释放buildType删除debuggable true防止看到日志在logcat中。

+0

我仍然不明白为什么我的班级里面的方法也越来越模糊,但模型和实体类都没有?我没有为他们写任何规则。 – saurabhlahoti

0

我是有行

-dontobfuscate 
在我的ProGuard文件

这是阻塞混淆