我正在开发一个Android应用程序。我使用progaurd混淆了项目的代码。我也想混淆文件夹结构。无论如何要做到这一点?
感谢您的帮助
答案 0 :(得分:2)
ProGuard包含various directives,用于ProGuard规则文件,可以对包名称进行模糊处理,例如-flattenpackagehierarchy
和-repackageclasses
。只需确保从AndroidManifest.xml
引用或通过反射访问的任何内容都保持不变。
可以想象,商业化的Android调整DexGuard工具甚至可以让您重新打包清单中的内容(通过修改清单条目作为混淆过程的一部分),但我不知道它是否确实如此或不。
答案 1 :(得分:0)
将此代码复制并粘贴到proguard.cfg中:
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontoptimize
-dontpreverify
-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.app.backup.BackupAgent
-keep public class * extends android.preference.Preference
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v7.app.ActionBarActivity
-keep public class * extends android.app.Fragment
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-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 * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
-dontwarn android.support.**