Android studio 生成.so库小白模式
在网上有很多例子,使用的多是配置NDK,但是我按照那些例子一步一步走,也能编译成功,但是结果就是生成不了NDK文件夹,也没有.so库.最终也没能找到是什么原因,但是在这里看到了另外一种方法:https://blog.****.net/xiaoyunchengzhu/article/details/52982284,但是在使用的过程中,遇到的各种异常现在总结一下:
1.出现异常:unable to get the cmake version located xxx.
新建完成之后,提示一个没有找到cmake版本的异常:unable to get the cmake version located xxx.
解决方法:到Setting中,下载CMake,默认下载的是最新版本的CMake
2.现在CMake成功之后提示异常:Error:Error occurred while communicating with CMake server
解决方法:选择下载3.6.4111459的版本,我的是Android studio 3.0,一开始默认下载了一个最新版本是3.10的CMake ,最新版本会报这个异常:
Error:Error occurred while communicating with CMake server,我将3.10卸载了,换成3.6.4111459这个版本就OK了
异常解决之后,然后rebuild 项目在找到了梦寐以求的.so
3.在MainActivity中添加新的native方法,编译没有问题,但是在运行的时候,出现异常:
No implementation found for java.lang.String com.xxx.jnitestdemo2.MainActivity.getMyString()
然后在对应的cpp文件中,添加方法:
解决方法:
在extern "C"后面加上大括号{},然后将所有需要的方法,都放在大括号里面,OK,成功获取希望的结果
extern "C" {
JNIEXPORT jstring
JNICALL
Java_com_xxx_jnitestdemo2_MainActivity_stringFromJNI2(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++1";
return env->NewStringUTF(hello.c_str());
}
JNIEXPORT jstring
JNICALL Java_com_xxx_jnitestdemo2_MainActivity_getMyString(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello is my String";
return env->NewStringUTF(hello.c_str());
}
}