如何不混淆 class 名称但仍然获得正确的简单名称?

How to not obfuscate class names but get the right simplename anyway?

我有 20 多个从 MyFragment 扩展而来的 Fragment,例如:

MyFragment 依次从 Fragment 延伸。因此,在我的 Android 应用程序中,每当我对其中一个应用程序进行充气时,我都会在我的抽象 class 中调用 showFragment(MyFragment f) 我触发 Adjust 事件的地方,

AdjustEvent event = new AdjustEvent(EVENT_LOAD_FRAGMENT);
// Add callback parameters to this parameter.
event.addCallbackParameter("LoadFragment", 
f.getClass().getSimpleName());
Adjust.trackEvent(event);

这样我就可以测量哪个片段被用作 kay 值对的频率。到目前为止一切顺利,在调试阶段它运行良好。

正如您现在想象的那样,getClass().getSimpleName() 在生产环境中被混淆了。我不想触及所有 20 个片段,如果 classes 被混淆就完全没问题了。但我仍然想获得 class' 有效的 getSimpleName() 字符串..

如何在混淆后得到一个 class 有效的 getSimpleName()

将以下内容添加到您的混淆器配置文件中。

-keep,allowobfuscation class  * extends com.you.package.name.MyFragment

我用过

-keepnames class  * extends com.you.package.name.MyFragment

解压 aar 和 classes.jar,并检查 seeds.txt 和 mapping.txt 的构建 forlder 以查看混淆