2012-05-11 110 views

回答

4

这是我用现在的规则:

-keepclassmembers class * extends com.sun.jna.** { 
    <fields>; 
    <methods>; 
} 

我仍然认为有可能是一个更好的办法来做到这一点,虽然。

+0

以什么方式更好?一个更简洁,更简洁的规则?更准确还是更正?我想“更正确”是唯一“更好”的事情。 – technomage

+0

@technomage - 我的直觉是我只需要保留从JNA('Structure','Library'等)扩展某些类的类。从理论上讲,从JNA类扩展的其他类可能是安全的混淆。所以,从某种意义上说,更好的代码会被不必要地保存。但是,我必须花一些时间阅读JNA文档才能弄明白,但对于我的应用程序来说,这并不重要,所以我不打算进一步研究它。 –

+0

目前,我正在保持公共领域的结构和子类图书馆的子类的公共方法。 – Trejkaz

1

JNA使用图书馆的接口方法名来查找本地函数名。除了这些以外的任何东西都应该能够承受混淆。

如果您的测试包括所有JNA呼叫的覆盖范围,那么您应该能够测试此问题几乎与在此处询问问题一样快。

编辑

认为这是一个评论,因为我不准备提供“-keep”命令:)

你一定要避免消除或重新排序任何结构域。

+0

我的目标是提出一个“面向未来”的规则,即使更多JNA库被编码,混淆仍然可以工作。其实我已经有了一个解决方案,但要公平,[我给别人一个机会来回答我之前的问题](http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-问题,即使是那些我知道答案之前问), –

+0

“你当然必须避免消除或重新排序任何结构域。” - 我没有考虑过,谢谢。 –