簡體   English   中英

可以在預編譯的C ++和Android的Java之間傳遞什么類型的數據?

[英]What type of data can be passed between pre-compiled C++ and Java for Android?

我正在研究一個當前在python中原型化的OpenCV項目,但是我想在Android中進行工作。

我認為最好從純Java開始,然后再將其轉移到Android,但是Java的OpenCV似乎沒有像Python和C ++那樣得到充分實現(例如,它沒有imshow)。 所以現在我不確定從Python到Java的轉換有多容易。

由於過去使用OpenCV進行Python到C ++的開發相對比較容易,所以我想到了其他選擇。 我看到您可以在Android中運行預編譯的C ++代碼,因此可以選擇。 我看到的問題是我不確定我可以如何傳遞所需的數據。 在Android Java和預編譯的C ++之間進行通信時,存在哪些限制? 預先編譯的C ++是否允許訪問文件系統,以便它可以讀取圖像?

您可以傳遞Java支持的任何數據。 顯然,您不能照原樣傳遞C ++類(盡管您可以傳遞一個指針,只要保持很長時間,就保留在Java中,然后再將其傳遞回C ++,以便可以再次使用它)。

在C ++方面,通過JNI API,您可以執行Java代碼可以執行的所有操作。 但是,這需要額外的工作,並且需要對線程綁定,JNI上下文和JNI / Java內存管理有清晰的了解。

在Java方面,可以將C函數字符串,原始類型(簡單)或復雜類型傳遞給C函數,然后使用JNI訪問字段,調用方法,引發異常等。

如果您從C ++ / JNI內部分配Java堆,則有一些關於內存管理的陷阱,請仔細閱讀有關分配,生命周期和引用類型的信息。

特定於Android的,您可能還想閱讀一些JNI技巧

Android本機至少可以使用與常規Android Java apk相同的功能訪問IO和文件系統。 您可以在此處查看示例,並討論Android NDK中的文件操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM