android - Proguard :- 混淆文件夹名称
问题描述
我想在发布 apk 后混淆我项目的所有文件夹名称。
我见过很多相关的问题,但没有一个有效。我已经尝试过-flattenpackagehierarchy 'myobfuscated'
,但它会创建另一个 myobfuscate 文件,而不是重命名所有文件夹和类。我也用过-repackageclasses ''
,但找不到解决办法。请帮我。
proguard.pro 文件看起来像:-
-ignorewarnings
-dontpreverify
-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>;
}
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-keepnames class * implements java.io.Serializable
-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();
}
-assumenosideeffects class android.util.Log {
public static *** e(...);
public static *** w(...);
public static *** wtf(...);
public static *** d(...);
public static *** v(...);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers class * {
public void *onClick(android.view.View);
}
-keep class org.xmlpull.v1.** { *;}
-dontwarn org.xmlpull.v1.**
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keepclassmembers class javax.xml.bind.DatatypeConverter { *; }
-keepclasseswithmembers class DatatypeConverter {
public static *;
}
-keep class javax.xml.** { *; }
-keep interface javax.xml.** { *; }
-keep class org.apache.xerces.** { *; }
-keep interface org.apache.xerces.** { *; }
解决方案
很可能您的其他-keep属性正在阻止包名称被混淆。
对于验证,注释-keep规则并运行 proguard。
谢谢
推荐阅读
- ios - 在 iOS 13 上隐藏后退按钮标题
- android - 从 URL 文件将文件上传到 Firebase 存储
- mongodb - 如何从集合中删除文档,如果同一集合中有“n”个文档,其“x”字段值与删除文档相同
- excel - 从另一个工作表中删除文本等于 #N/A 的行
- angularjs - Angular JS 表达式未使用 $http 服务进行评估
- java - 为什么我的应用程序没有从 Firebase 捕获任何数据?
- javascript - 如何用 && 正确检查两个条件
- java - 在 Java+kotlin 项目中使用 moshi 的正确方法
- reactjs - 如何在 React Typescript 的单元测试中导出模块
- android - FusedLocationProviderClient 在哪里适合 Android 上的 MVVM?