换句话说:我应该用什么-keep
命令告诉Proguard避免混淆代表本地库的类? (因为JNA要求的名称相匹配相应的原生功能,结构等)默认如何告诉Proguard避免混淆JNA库类?
回答
这是我用现在的规则:
-keepclassmembers class * extends com.sun.jna.** {
<fields>;
<methods>;
}
我仍然认为有可能是一个更好的办法来做到这一点,虽然。
以什么方式更好?一个更简洁,更简洁的规则?更准确还是更正?我想“更正确”是唯一“更好”的事情。 – technomage
@technomage - 我的直觉是我只需要保留从JNA('Structure','Library'等)扩展某些类的类。从理论上讲,从JNA类扩展的其他类可能是安全的混淆。所以,从某种意义上说,更好的代码会被不必要地保存。但是,我必须花一些时间阅读JNA文档才能弄明白,但对于我的应用程序来说,这并不重要,所以我不打算进一步研究它。 –
目前,我正在保持公共领域的结构和子类图书馆的子类的公共方法。 – Trejkaz
JNA使用图书馆的接口方法名来查找本地函数名。除了这些以外的任何东西都应该能够承受混淆。
如果您的测试包括所有JNA呼叫的覆盖范围,那么您应该能够测试此问题几乎与在此处询问问题一样快。
编辑
认为这是一个评论,因为我不准备提供“-keep”命令:)
你一定要避免消除或重新排序任何结构域。
我的目标是提出一个“面向未来”的规则,即使更多JNA库被编码,混淆仍然可以工作。其实我已经有了一个解决方案,但要公平,[我给别人一个机会来回答我之前的问题](http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-问题,即使是那些我知道答案之前问), –
“你当然必须避免消除或重新排序任何结构域。” - 我没有考虑过,谢谢。 –
- 1. 如何告诉Proguard混淆特定的死代码
- 2. Proguard:避免命名与预混淆库JAR的冲突
- 3. 指定Proguard的类名称以避免混淆
- 4. 如何在ProGuard中混淆库jar?
- 5. 如何在ProGuard GUI中避免警告
- 6. 如何辨别Proguard混淆类名
- 7. Android proguard不会混淆类
- 8. Android ProGuard混淆特定类
- 9. 如何混淆使用ProGuard
- 10. Dexguard:避免串混淆
- 11. ProGuard的混淆
- 12. 与proguard混淆
- 13. 如何告诉ProGuard保持相同的混淆名称跨建立
- 14. ProGuard混淆变量命名,如何避免本地和参数前缀?
- 15. 使用proguard混淆
- 16. Proguard混淆和Renderscript
- 17. Cordova android 5.1.1 APK混淆与proguard混淆
- 18. 使用Proguard的Jackson库混淆后
- 19. proguard中的自定义混淆类名
- 20. Proguard - 不要混淆Kotlin数据类
- 21. ProGuard不会完全混淆Serializable类
- 22. Android - Proguard混淆无法找到android类
- 23. 如何防止Proguard混淆破坏jdom.jar
- 24. 如何排除从ProGuard的混淆
- 25. 如何使用Maven和ProGuard混淆webapp
- 26. 最近清除以避免混淆
- 27. DexGuard/Proguard混淆注释值
- 28. 用ProGuard混淆clojure uberjars
- 29. 代码混淆使用ProGuard
- 30. proguard混淆后的java.lang.NoClassDefFoundError
任何依赖JNA的显式命名工作的类成员。 – Vulcan