2013-01-02 34 views
4

所以這裏是我想要做的。我有一個第三方本機可執行文件正在我的Activity中產生。活動和本地可執行文件通過TCP進行通信。 事情是 - 第三方應用程序使用libusb,因此需要root。所以我認爲有可能實際編寫一個封裝器libusb-java,它具有與原始的libusb相同的接口,但是改爲使用Android USB Host API。因此,我可以將正在運行的可執行文件與我的libusb-java鏈接起來,而不更改它,它將使用Android USB Host API。問題是,如果我想編寫libusb-java,我需要能夠從庫內部訪問JVM(這將在第三方可執行文件啓動時動態加載),但由於這不會是鏈接在Java端,我無法訪問它。有沒有簡單的方法來調用一個本地可執行文件中的一些未鏈接到Activity的Java代碼(可能是反射?)。有任何想法嗎?從Android中的外部本機可執行文件調用java代碼

例如: 如果我的本機二進制電話* libusb_open()*,它實際上調用* libusb_open()*從的libusb-java的這反過來應該調用openDevice(android.hardware的)。 usb.UsbManager而不是原始的直接本地實現。 (我簡單的說法,但不是基本的想法)

回答

0

簡單的回答:不,沒有。你可以啓動你自己的Dalvik虛擬機,並且可能會調用它,但它不會作爲一個活動存在於Android系統中,所以很難使用許多平臺服務。

您最好嘗試重構本機代碼,使其作爲活動或服務託管進程以正常Android時尚方式由DVM加載的庫運行。有時候,這可能與從靜態jni子例程調用它的main()幾乎一樣簡單,但要小心進程級靜態數據中可能存在的不一致,因爲Android通常會在舊進程中啓動新實體。

或者你可以通過TCP代理你的模擬API調用,[有一些欺騙] Binder或其他IPC機制。

+0

我很害怕這個。鏈接將不會做這項工作,因爲會有許可問題:)但無論如何,我會考慮。謝謝。 –

+0

活頁夾IPC暴露於C代碼IIRC。 –

相關問題