【发布时间】:2015-03-23 00:45:37
【问题描述】:
我正在开发一个安卓应用程序。我使用 progaurd 混淆了项目的代码。我也想混淆文件夹结构。无论如何要这样做?
感谢您的帮助
【问题讨论】:
-
你指的是什么“文件夹结构”?
-
我指的是“包名”
我正在开发一个安卓应用程序。我使用 progaurd 混淆了项目的代码。我也想混淆文件夹结构。无论如何要这样做?
感谢您的帮助
【问题讨论】:
ProGuard 包含various directives,用于您的 ProGuard 规则文件,可以混淆包名称,例如 -flattenpackagehierarchy 和 -repackageclasses。只需确保从 AndroidManifest.xml 引用或以其他方式通过反射访问的任何内容都保持不变。
可以想象,商业化的、Android 调优的DexGuard 工具甚至可以让你重新打包清单中的东西(通过修改清单条目作为混淆过程的一部分),但我不知道它是否这样做.
【讨论】:
将此代码复制并粘贴到 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.**
【讨论】: