換句話說:我應該用什麼-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