不在linux上编译android所用.a和.so,在windows上如何编译呢?
1.准备工作:
1.vs2008,别的版本vs应该也可以,我用的就是2008;
2.cmake,下载个最新的版本,装上,安装好后把bin目录加入环境变量;
3.ndk,最新版本是ndk10了,附上下载地址https://developer.android.com/tools/sdk/ndk/index.html;
4.工具链,没这个玩不转,也附上下载地址:https://github.com/taka-no-me/android-cmake/archive/master.zip
感谢人家,俺还不会写。
2.开始写一点点代码
使用java声明个native函数:
package android.jni.test; public class NativeClassT { public native static int test(int value); }
在src统计目录下新建个jni文件夹,在里边定义本地函数,头文件可以使用javah工具生成;直接贴出来了,android_jni_test_NativeClassT.h
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class android_jni_test_NativeClassT */ #ifndef _Included_android_jni_test_NativeClassT #define _Included_android_jni_test_NativeClassT #ifdef __cplusplus extern "C" { #endif /* * Class: android_jni_test_NativeClassT * Method: test * Signature: (I)I */ JNIEXPORT jint JNICALL Java_android_jni_test_NativeClassT_test (JNIEnv * env, jclass claszz, jint val); #ifdef __cplusplus } #endif #endif
android_jni_test_NativeClassT.cppandroid_jni_test_NativeClassT.cppandroid_jni_test_NativeClassT.cppandroid_jni_test_NativeClassT.cppandroid_jni_test_NativeClassT.cpp#include "android_jni_test_NativeClassT.h" JNIEXPORT jint JNICALL Java_android_jni_test_NativeClassT_test (JNIEnv * env, jclass claszz, jint val) { return ++va; }文件名不能随便乱取,是有规律的;
写的太简单了点,就是把传过来的值+1;
3.编译so
写个CMakeLists文件,至于如何写,这里先不说,也是直接上代码CMakelists.txt:
cmake_minimum_required(VERSION 3.1) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/libs) add_library(libJni SHARED ${SRC_LIST}) set_target_properties(libJni PROPERTIES OUTPUT_NAME "JNI")
此文件放到与c++文件同目录,为了将编译与源码相分离,在此目录新建文件夹build,在里面新建批处理文件build.dat:set ANDROID_NDK=<NDK根目录> cmake .. -G "NMake Makefiles" -DCMAKE_TOOLCHAIN_FILE=<android.toolchain.cmake文件位置,包含文件名> -DCMAKE_MAKE_PROGRAME=<NDK根目录>/prebuilt/windows/bin/make.exe nmake之后打开vs2005命令行窗口,cd到build.dat目录,运行build批处理文件,OK大功告成,在build文件夹找libs文件夹吧,看看里边有没有一个叫libJNI.so的文件
在android中加载它,并调用native函数试试看,结果是不是加了1
ps:为了节省时间, 用的例子基本上都是最简单的,复杂的情况大家可以自己扩展;一些东西也没有介绍,例如CMakelists.txt如何写,jni头文件如何生成,不过这些网上有很多。大家可以百度之,很多人写的非常好。有时间我也总结总结;
这篇博客介绍了在Windows上使用Visual Studio 2008、cmake和NDK进行Android动态库.so及静态库.a的编译步骤。首先,列举了所需的软件和工具链,接着展示了如何编写JNI本地函数,最后通过CMakeLists.txt文件进行编译生成libJNI.so库。虽然例子简洁,但对于初学者理解编译过程非常有帮助。
2233

被折叠的 条评论
为什么被折叠?



