Android NDK可以在Android共享库中包含一个Windows dll吗?

甚至可以在ndk-build命令中链接/包含一个dll文件,并生成一个可以从android java代码访问dll函数的共享库。

我一直在尝试这样做,我尝试使用SWIG创建一个java包装器代码到dll而我没有成功,然后我开始认为它甚至可能!

谢谢。

不可以.Windows DLL的格式与Android和Linux不同。

Windows使用称为PE COFF的格式:“可移植可执行文件,通用对象文件格式”。 虽然COFF本身来自UNIX,但微软有自己的版本。 存在进一步的不兼容性以支持.Net对象。 大多数UNIX和Linux使用ELF – 执行和链接格式。

即使它们通过某种奇迹使用相同的格式,它可能仍然无法工作,因为机器架构必须是相同的,例如ARM(以及ARM的几种配置)或Intel x86。

而且还有更多。 即使你设法让DLL运行,它还有什么用? DLL通常具有其他外部依赖项,例如C运行时库,MSVCRT或kernel.dll

那么,获取源代码并原生重新编译它? 这可能DLLMain() ,但Windows DLL有时会有一个可选的DLLMain()入口点,Linux .so文件没有直接的等价物。 那剩下的代码怎么样? 它是以便携方式编写的吗? 是否一直坚持使用ISO语言标准? 要真正可移植,必须以这种方式设计和编写代码。

不。不是没有构建整个Windows兼容性层。 Android与开箱即用的Windows不兼容。

此外,Windows DLL往往是针对Intel x86 CPU编译的,而大多数Android设备都有ARM CPU。 虽然存在Windows for ARM(Windows Phone,Windows RT等),但Android上不存在DLL应该存在的环境。