【发布时间】:2011-01-25 12:33:26
【问题描述】:
我可以在Android应用中使用dll文件(windows应用中常用)吗?
【问题讨论】:
-
您是否设法找到了实现这一目标的方法?还是根本不可能发生?如果您对stackoverflow.com/questions/28393305/…有答案,我的问题会在此处说明@
我可以在Android应用中使用dll文件(windows应用中常用)吗?
【问题讨论】:
Android 在 Linux 系统上运行 - DLL 文件通常是为 Windows 编译的字节码。
【讨论】:
如果您有 DLL 的 src 文件,请尝试重新编译为 ELF32 共享对象,然后将其链接到您的 Android 代码(- 下面是 Windows 解决方案):
set NDK_HOME=C:\Android\android-ndk-r9c // customize this var for your own location
set LD_LIBRARY_PATH=%NDK_HOME%\platforms\android-18\arch-arm\usr\lib
cd <C_SOURCE_DIRECTORY>
REM -- TEMPORARILY COPY SOME LIBS COMPILER MAY NEED
copy %NDK_HOME%\platforms\android-18\arch-arm\usr\lib\crtbegin*.o .
copy %NDK_HOME%\platforms\android-18\arch-arm\usr\lib\crtend*.o .
REM -- GENERATE YOUR OBJ FILE
%NDK_HOME%\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc.exe -g -I%NDK_HOME%\platforms\android-18\arch-arm\usr\include -c -fPIC YourLib.c -o YourLib.o
REM -- GENERATE SHARED OBJ FROM OBJ FILE
%NDK_HOME%\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc.exe -g -L%NDK_HOME%\platforms\android-18\arch-arm\usr\lib -shared -o YourLib_so.so YourLib_so.o
REM -- finally, remove the libraries previously copied to src directory
del .\crtbegin*.o
del .\crtend*.o
您现在应该可以在您的 Android 项目中使用生成的 .so 文件了。
【讨论】:
DLL 代表“动态链接库”,是一个 Windows 概念。 linux中的等价物是SO(Shared Object)。
两者的异同可以参考CodeProject中的this article。
这个Stackoverflow question 非常相似。
【讨论】:
您可以在 Linux 上使用 Wine 来运行具有 dll-s 的程序。此外,您在 Android(也是 Linux 的一个版本)中拥有的 .apk 文件可能具有 dll-s,如果您的内部有一个可以运行这些 dll-s 的运行时。
Unity 和 Xamarin 都支持 dll。
【讨论】: