windows下使用cmake和ndk编译android所用动态库.so和静态库.a

这篇博客介绍了在Windows上使用Visual Studio 2008、cmake和NDK进行Android动态库.so及静态库.a的编译步骤。首先,列举了所需的软件和工具链,接着展示了如何编写JNI本地函数,最后通过CMakeLists.txt文件进行编译生成libJNI.so库。虽然例子简洁,但对于初学者理解编译过程非常有帮助。

      不在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头文件如何生成,不过这些网上有很多。大家可以百度之,很多人写的非常好。有时间我也总结总结;




 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值