甚至可以在ndk-build命令中鏈接/包含一個dll文件,並生成一個可以從android java代碼訪問dll函數的共享庫。Android NDK可以包含一個Windows DLL到一個Android共享庫嗎?
我一直在努力做到這一點,我試圖用SWIG來創建一個Java包裝代碼DLL和我沒有成功,於是我開始想是它甚至有可能!
謝謝。
甚至可以在ndk-build命令中鏈接/包含一個dll文件,並生成一個可以從android java代碼訪問dll函數的共享庫。Android NDK可以包含一個Windows DLL到一個Android共享庫嗎?
我一直在努力做到這一點,我試圖用SWIG來創建一個Java包裝代碼DLL和我沒有成功,於是我開始想是它甚至有可能!
謝謝。
否。Windows DLL與Android和Linux的格式不同。
Windows使用稱爲PE COFF格式:「移植可執行,通用對象文件格式」。儘管COFF本身來自UNIX,但Microsoft有自己的版本。爲了支持.Net對象存在進一步的不兼容性。大多數UNIX和Linux使用ELF - 執行和鏈接格式。
即使他們是由某種奇蹟,使用相同的格式,它可能仍然是行不通的,因爲機器結構必須是相同的,例如ARM(以及ARM的幾種配置)或Intel x86。
還有更多。即使您設法讓DLL運行,它還使用了什麼? DLL通常具有其他外部依賴關係,例如C運行時庫MSVCRT或kernel.dll
。
因此,獲得源代碼,並重新編譯本身呢?這可能會起作用,但Windows DLL有時具有可選的DLLMain()
入口點,該文件與Linux .so
文件沒有直接的等效關係。代碼的其餘部分呢?它是否以便攜式方式書寫?它始終堅持使用ISO語言標準嗎?爲了實現可移植性,代碼必須以這種方式進行設計和編寫。
問題是關於共享庫,它應該是獨立的千恩萬謝,請在這裏看到http://ngspice.sourceforge.net/shared.html有UNIX共享庫也將有可能使用它? – simo
@simo我想過,並問另一個問題[這裏](http://stackoverflow.com/questions/19280391/can-a-shared-library-so-file-built-for-linux-be-included-linked並且使用了),結果證明整個庫需要專門爲Android構建。 –
我正在使用android sdk,是否有任何方法或解決辦法來管理導入我的原生android應用程序中的dll庫?我在這裏描述的問題,如果你有一個解決方案http://stackoverflow.com/questions/28393305/using-dll-library-in-android-application –
不可以。不是沒有構建整個Windows兼容性層。 Android與開箱即用的Windows不兼容。
此外,Windows DLL文件往往會被編譯爲英特爾x86處理器,而大多數的Android設備有ARM的CPU。雖然Windows for ARM存在(Windows Phone,Windows RT命名一些),但是Android上不存在DLL應該存在的環境。
我正在使用android sdk,是否有任何方式或解決辦法來管理導入我的原生android應用程序中的dll庫?我在這裏描述的問題,如果你有一個解決方案http://stackoverflow.com/questions/28393305/using-dll-library-in-android-application –
看到你的問題。你不能。考慮將C#重寫爲Java,並將.NET庫調用替換爲等效的Java庫調用。根據您使用的特定於Windows的API的多少,它可能可能也可能不可行。 –
好了,你的迴應 –
您無法在Android上運行任意Windows代碼。 – SLaks