2012-05-11 56 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

「你當然必須避免消除或重新排序任何結構域。」 - 我沒有考慮過,謝謝。 –