我有一個加載.so文件並打印來自.so文件的結果的java文件。我的.so文件沒有源代碼。任何人都可以告訴如何在內存結構.so結果加載,並從這個Java類正在讀取.so生成的結果和打印出來?JNI如何在內存級別工作
回答
如果你有任何已經用本地語言編寫的代碼,並且不願意改變它,但是你想在你的java代碼中使用本機調用,而不是完全重寫所有的java。 JNI派上用場。它將所有平臺特定的實現轉換爲獨立於平臺。標準庫中性能和平臺敏感的API實現允許所有Java應用程序訪問此功能。以這種方式轉換庫文件.so。
JNIEnv包含從本機數據類型到java數據類型的所有類型的轉換。它也支持本地方法調用的合適實現,信號也由JVM處理。
作爲獨立於平臺的本地進程,特定於硬件和操作系統平臺的Java都通過將原生數據類型和方法調用映射到java而與平臺無關。 JNI執行上述使用庫文件的例子。所以還是.a文件
的對於JNI映射ü可以參考以下鏈接 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html
您的.so有一個JNI膠合類,它將所有Java本地方法(公共本機void x();)與編譯好的本機代碼綁定在一起。
我假設它使用JNI,否則我不知道它是如何工作的。如果它使用JNI,那麼它實際上使用JNI庫在.so中的Java堆上創建Java對象。尋找標記爲「native」的函數,這些函數直接映射到函數中,這樣當Java代碼在庫中運行某些東西時會被調用。
謝謝您的回答。是的,它使用JNI,並使用System.LoadLibrary(.so)加載,但不知道函數映射。 Java程序使用libSSM.so來監視CPU使用情況並在android應用程序上打印結果。所以想知道MainActivity.java從哪裏讀取內存結構中編譯的C++代碼的值。 –
- 1. 交換方法在內存級別如何在C#中工作?
- 2. ptrace是否在用戶級別或內核級別上工作?
- 3. 如何解決內存警告級別1,然後內存警告級別2?
- 4. 如何在Android中使用NDK JNI獲取Wifi RSSI級別
- 5. 內存級別的OOP
- 6. Jni不工作
- 7. JNI釋放內存
- 8. JNI內存泄漏
- 9. HttpURLConnection的工作API級別<11,不工作的API級別>在Android
- 10. 內存在Windows中如何工作?
- 11. log4j2根級別不工作
- 12. ng級別不能工作
- 13. JavaFX緩存不能在羣組級別工作,內容元素數量很多
- 14. 內存分配 - 如何關聯程序級別和物理級別?
- 15. C - 在內存級別如何進行算術轉換?
- 16. OpenCV到JNI如何使它工作?
- 17. Android支持庫如何在目標SDK級別上工作?
- 18. MongoDB中的關注點如何在線程級別工作?
- 19. 在JVM級別如何等待/通知工作?
- 20. 引用如何在較低級別工作
- 21. 如何使android:background =「?android:attr/selectableItemBackground在API級別8工作
- 22. 可執行文件如何在位/字節級別上工作?
- 23. 循環如何在最低級別工作
- 24. Android BroadcastReceiver如何在系統級別工作?
- 25. 準備好的語句如何在SQL級別上工作?
- 26. 數組通常如何在低級別上工作?
- 27. 隔離級別「READ COMMITED」如何在Oracle DB中工作?
- 28. Reflection如何在機器語言級別上工作
- 29. gwt事件如何在低級別上工作
- 30. SOA服務組合在代碼級別如何工作?
謝謝你的回答。它確實有幫助。是的,我有一個用Java編寫的代碼,用於加載libSSM.so,它可以計算CPU使用率值。此Java程序在Android應用程序上打印來自.so文件的CPU使用率值。當然,Java必須從內存中的某個地方讀取這些值,所以想知道內存結構中存儲的.so文件的存儲位置。 –