gpt4 book ai didi

java - Android Proguard - 反射 java.lang.reflect 调用不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 14:51:17 26 4
gpt4 key购买 nike

我正在使用 follow 方法在 Android ActionBar 上强制堆叠选项卡。

当我开始使用 proguard 时,类操作不再有效。没有收到错误消息,我只是没有收到堆叠选项卡 ActionBar。

这就是我的 proguard 规则中的内容。我有什么明显遗漏的吗?

-keepattributes Signature
-keepattributes *Annotation*
-keep class java.lang.reflect.** { *; }
-keep class com.company.myapplication1.SetStackedTabs.** { *; }

_

public static void SetStackedTabs(Object inActionBar, final boolean inHasEmbeddedTabs){
// get the ActionBar class
Class<?> actionBarClass = inActionBar.getClass();

// if it is a Jelly Bean implementation (ActionBarImplJB), get the super class (ActionBarImplICS)
if ("android.support.v7.app.ActionBarImplJB".equals(actionBarClass.getName()))
{
actionBarClass = actionBarClass.getSuperclass();
}

// if Android 4.3 >
if ("android.support.v7.app.ActionBarImplJBMR2".equals(actionBarClass.getName())){
actionBarClass = actionBarClass.getSuperclass().getSuperclass();
}

try
{
// try to get the mActionBar field, because the current ActionBar is probably just a wrapper Class
// if this fails, no worries, this will be an instance of the native ActionBar class or from the ActionBarImplBase class
final Field actionBarField = actionBarClass.getDeclaredField("mActionBar");
actionBarField.setAccessible(true);
inActionBar = actionBarField.get(inActionBar);
actionBarClass = inActionBar.getClass();
}
catch (IllegalAccessException e) {}
catch (IllegalArgumentException e) {}
catch (NoSuchFieldException e) {}

try
{
// now call the method setHasEmbeddedTabs, this will put the tabs inside the ActionBar
// if this fails, you're on you own <img class="wp-smiley" alt=";-)" src="http://www.blogc.at/wp-includes/images/smilies/icon_wink.gif">
final Method method = actionBarClass.getDeclaredMethod("setHasEmbeddedTabs", new Class[] { Boolean.TYPE });
method.setAccessible(true);
method.invoke(inActionBar, new Object[]{ inHasEmbeddedTabs });
}
catch (NoSuchMethodException e) {}
catch (InvocationTargetException e) {}
catch (IllegalAccessException e) {}
catch (IllegalArgumentException e) {}
}

最佳答案

解决了。

我必须将此行输入到 ProGuard 配置中。

-keep class android.support.v7.** { *; }

关于java - Android Proguard - 反射 java.lang.reflect 调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23744440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com