我想在使用JNI,C/C++和調用API的Java程序的windows平臺下創建可執行文件,我已經爲我的程序創建了包含所有依賴項的jar文件。我想將它嵌入到exe文件中,我使用JNI調用API成功運行了簡單的主類(存在於文件系統中),我打算在C/C++程序中添加jar文件作爲資源。但我不知道如何運行該jar文件,一個選項是在文件系統上創建臨時jar文件並使用java運行它,但出於安全原因,我不想將我的jar文件公開給每個人,我該如何運行jar文件在使用JNI飛行?使用JNI創建java可執行文件?
回答
將Java編譯爲使用GCJ的可執行文件不能一直工作,使用反射和其他項目(如UI類Look at this page)時存在限制。
如果您將Java代碼轉換爲庫或其他模塊,那麼您可以鏈接到它並簡單地運行它,而不需要JVM。
反思應該與OP正在追求的戰略一致。 – 2010-05-08 13:53:27
@Kevin Day--我猜你是因爲把反射放在那裏。你沒有按照我的鏈接指向GCJ。我已經編輯了我的帖子,因爲它使得它更加明確:( – 2010-05-08 14:27:03
Fair'nough認爲ding顛倒了;-) – 2010-05-09 02:49:13
我最初的反應是,如果你能得到這個工作並保持高性能,我會感到震驚。但後來我開始考慮它,也許你可以使用自定義類加載器來解決這個問題。如果您將jar作爲資源嵌入到exe文件中,它將與在任何文件(無論是否是exe文件)中的某個特定偏移量處存在jar字節完全相同。
所以,這裏有一個潛在的策略:實現一個自定義類加載器,它接受該文件中的jar資源的exe路徑和偏移量。這將使用ZipFile的自定義版本,它使用固定的索引偏移量來讀取它(不幸的是,它不可能使用ZipFile本身 - 但是如果你抓取ZipFile的源代碼,它應該是非常明顯的地方,需要添加偏移量)。
這裏有一個引導問題(你如何加載自定義類加載器?) - 但我認爲可能從JNI方面做到這一點。基本上你會將加載器的.class文件作爲exe文件中的一個單獨的資源存儲,並將其完全加載到內存中,然後使用JNI調用來構造它。這將是一個麻煩,但它只適用於一個類,然後您可以讓Java運行時接管其餘部分。
聽起來像一個有趣的項目(雖然,正如其他人指出的那樣,你在做什麼沒有太多安全性......我想你可以加密嵌入的jar並將加密代碼添加到類加載器中,但你有點兒需要決定你想要拿多少東西)。
- 1. 使用Java創建可執行設備
- 2. Eclipse使用外部庫創建java可執行文件
- 3. java可執行jar創建
- 4. 如何使用netbeans創建可執行文件.jar文件
- 5. 用Eclipse創建一個java可執行文件
- 6. 是否可以使用Java創建一個.exe可執行文件?
- 7. 如何運行使用maven創建的可執行jar文件?
- 8. 使用PyInstaller創建的Python可執行文件不會運行
- 9. 使用運行時庫和可執行文件創建RPM包
- 10. 如何在jni文件夾中創建java類?可能嗎?
- 11. 使用JNI從Java創建QMainWindow
- 12. 如何創建ELF可執行文件?
- 13. 創建可執行WAR文件
- 14. 創建boost工具可執行文件
- 15. 沒有創建可執行文件
- 16. 從jar中創建可執行文件
- 17. IDE如何創建可執行文件?
- 18. 創建新的ELF可執行文件
- 19. Python/SciPy - 創建可執行文件
- 20. Py2EXE無法創建可執行文件
- 21. Opa可執行文件未被創建
- 22. 如何創建Javascript可執行文件?
- 23. 使用opencv爲應用程序創建可執行文件?
- 24. 用文本文件創建可執行的jar文件
- 25. 我如何在Java中創建可執行文件
- 26. 如何在Java中創建可執行文件
- 27. 如何爲Windows創建獨立的Java可執行文件?
- 28. 從可執行Java Jar文件創建Shell腳本
- 29. 使用java中的代碼爲Windows 8創建可執行文件
- 30. 如何使用automake,即autotools從Java類創建可執行文件?
「我不想將我的jar文件暴露給所有人出於安全原因」通過將它放入exe文件並將exe文件發送給某人,您就會暴露它。 – 2010-05-08 14:02:04
是的,但exe無法反編譯,就像字節碼 – Xinus 2010-05-08 14:11:31
一樣容易。但是,如果您只是將JAR文件打包到.exe中,則無需「反編譯」即可將其解壓出來。 – Nate 2010-05-08 15:18:44