gpt4 book ai didi

Android TreeView lib 和 proguard 遭遇

转载 作者:太空狗 更新时间:2023-10-29 13:19:44 25 4
gpt4 key购买 nike

在 android 中创建 TreeView 的库非常好,AndroidTreeView .

这个库在我启用 proguard 之前工作正常,然后应用程序崩溃了。

注意:我有一个包含 5 个 fragment 的 ViewPager,它们都使用 treeview

使用默认的 progaurd 设置,我收到此错误:

java.lang.RuntimeException: Could not instantiate class class com.mehdok.c.c
at com.mehdok.e.a.a.b(Unknown Source)
at com.mehdok.e.a.a.a(Unknown Source)
at com.mehdok.e.a.a.b(Unknown Source)
at com.mehdok.e.a.a.b(Unknown Source)
at com.mehdok.e.a.a.a(Unknown Source)
at com.mehdok.b.b.b(Unknown Source)
at com.mehdok.b.b.onCreateView(Unknown Source)

所以我尝试更改 proguard 设置:

-keep public class com.mehdok.views.treeview.AndroidTreeView
-keep public class com.mehdok.views.treeview.SimpleViewHolder
-keep public class com.mehdok.views.treeview.TreeNode
-keep public interface com.mehdok.views.treeview.TreeNode$TreeNodeClickListener
-keep public class com.mehdok.views.treeview.TreeNode$BaseNodeViewHolder
-keep public class com.mehdok.views.treeview.TreeNodeWrapperView
-keep class com.mehdok.views.treeview.** { *; }
-keep public class com.mehdok.holders.TreeViewHolder
-keep public class com.mehdok.holders.TreeViewHolder$TreeViewItem

现在我收到这个错误:

java.lang.RuntimeException: Could not instantiate class class com.mehdok.holders.TreeViewHolder
at com.mehdok.views.treeview.AndroidTreeView.getViewHolderForNode(Unknown Source)
at com.mehdok.views.treeview.AndroidTreeView.addNode(Unknown Source)
at com.mehdok.views.treeview.AndroidTreeView.expandNode(Unknown Source)
at com.mehdok.views.treeview.AndroidTreeView.getView(Unknown Source)
at com.mehdok.views.treeview.AndroidTreeView.getView(Unknown Source)
at com.mehdok.b.b.b(Unknown Source)
at com.mehdok.b.b.onCreateView(Unknown Source)

proguard mapping文本的相关部分:

com.mehdok.fragments.Tab1Fragment -> com.mehdok.b.b:
com.mehdok.fragments.Tab1Fragment mInstance -> a
android.widget.FrameLayout baseView -> b
com.mehdok.fragments.Tab1Fragment getInstance() -> a
android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle) -> onCreateView
void findViews(android.view.View) -> a
void fillView() -> b

TreeViewHolder.java

public class TreeViewHolder extends TreeNode.BaseNodeViewHolder<TreeViewHolder.TreeViewItem>
{
public TreeViewHolder(Context context)
{
super(context);
}

@Override
public View createNodeView(TreeNode node, TreeViewItem value)
{
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.treeview_layout, null, false);
TextView tvValue = (TextView) view.findViewById(R.id.row_text);
tvValue.setText(value.nodeName);

return view;
}

@Override
public void toggle(boolean active)
{
super.toggle(active);
}

public static class TreeViewItem
{
public String nodeName;
public int nodeNavNum;
public int nodeDeep;

public TreeViewItem(String name, int nav, int deep)
{
nodeName = name;
nodeNavNum = nav;
nodeDeep = deep;
}
}
}

Tab1Fragment.java

public class Tab1Fragment extends Fragment
{
private static Tab1Fragment mInstance;
private FrameLayout baseView;

public static Tab1Fragment getInstance()
{
if(mInstance == null)
{
mInstance = new Tab1Fragment();
}

return mInstance;
}

public Tab1Fragment()
{
// Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_tab1, container, false);
findViews(v);
fillView();

return v;
}

private void findViews(View v)
{
baseView = (FrameLayout)v.findViewById(R.id.tab1_base_layout);
}

private void fillView()
{
TreeNode root = TreeCreator.createTitle1Tree();
AndroidTreeView tView = new AndroidTreeView(getActivity(), root);
tView.setDefaultAnimation(true);
tView.setDefaultContainerStyle(R.style.TreeNodeStyle);
tView.setDefaultViewHolder(TreeViewHolder.class);
//tView.setDefaultNodeClickListener(nodeClickListener);

baseView.addView(tView.getView());
}

}

那么我如何配置 progaurd 为我工作呢?

如有任何帮助,我们将不胜感激。

最佳答案

保留 View 持有者解决了问题

-keep public class com.mehdok.holders.TreeViewHolder
-keep public class com.mehdok.holders.TreeViewHolder$TreeViewItem
-keepclassmembers class com.mehdok.holders.TreeViewHolder {
public *;
private *;
}

关于Android TreeView lib 和 proguard 遭遇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30480816/

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