windows下使用cmake和ndk编译android所用动态库.so和静态库.a
来源:互联网 发布:页面加载速度优化 编辑:程序博客网 时间:2024/05/22 18:55
不在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 __cplusplusextern "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.exenmake之后打开vs2005命令行窗口,cd到build.dat目录,运行build批处理文件,OK大功告成,在build文件夹找libs文件夹吧,看看里边有没有一个叫libJNI.so的文件
在android中加载它,并调用native函数试试看,结果是不是加了1
ps:为了节省时间, 用的例子基本上都是最简单的,复杂的情况大家可以自己扩展;一些东西也没有介绍,例如CMakelists.txt如何写,jni头文件如何生成,不过这些网上有很多。大家可以百度之,很多人写的非常好。有时间我也总结总结;
- windows下使用cmake和ndk编译android所用动态库.so和静态库.a
- android ndk第一步使用ndk和Cmake编译.so文件
- Jni中执行ndk-build,编译第三方静态库(.a)和动态库(.so)的Android.mk文件写法
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- android开发 NDK 编译和使用静态库、动态库
- 使用NDK和CMake在Linux上编译Android动态库
- 袅膄膁蒇袄袃莇莃蒀羆膀艿
- 罿荿莄蚄羂肂薃薃袄肇荿螅
- 蒂葿螅膂膁蚅蚁芁芄蒈羀芀
- 薇羅芄薃蚃螁肄蒅蚈羀羃蒈
- 羄芀螇蚆膀膆螆蝿羃蒅螅羁
- windows下使用cmake和ndk编译android所用动态库.so和静态库.a
- 莅蚅袃莆薄袇袅聿芀螆袈膄
- Page Design for Sexable Forum
- 聿蒆袈罿莈蒅薈螂芄蒄蚀羇
- 薀袈羈葿葿袁肄芅蚂螃肀莄
- 蕿羁肂蒁蚈蚁芈莇蚇螃肀芃
- c++中的进制转换
- 节螅羃芆蚈袁肂膆蚀羇衿蒈
- 蚅螆膅节螇羂肁莁蒇螄羇莁