2017-02-22 160 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文件

這是阻塞混淆