dll 是 Windows 平台的动态库,而 so 是 Linux 平台的。即使你用别的编译器如 gcc 把 VC 开发的动态库能编译为 so 也能被 Android 调用,但归根结底这个 so 还是要调用 Windows API,这根本就是不可能生效。要 Android 能调用,那么就必须要用标准 C 以及 Android 提供的系统 API 函数在 Linux 上编译。在 Windows 平台,你可以试试安装 MinGW,使用其 gcc 编译器来编译 so 库。就是不知道是否可以设置 CPU 指令集,如果不能设置 ARM 那么编译了没法用。
创新互联企业建站,10年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于网站设计制作、成都网站建设中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。
在一些Android应用的开发中,需要通过JNI和 Android NDK工具实现JAVA和C/C++之间的相互调用。
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在 Java 虚拟机 (VM)内部运行的 Java代码能够与用其它编程语言(如 C、C++和汇编语言)编写的应用程序和库进行交互操作。
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
安卓也可以用C语言编写,这种方式程序效率高,但需要一些底层知识。。。(即所谓NDK),Android在支持NDK后是可以实现用C和C++来编写的。因为用C++比较多,之前用cocos2d-x写过Demo游戏。就使用了NDK编译出.so文件然后放入Android工程用在Java层调用。Android SDK的Java层是可以通过JNI和C/C++进行数据交互的。
详见:
Android NDK | Android Developers
The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can be helpful so you can reuse existing code libraries written in these languages, but most apps do not need the Android NDK.