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了

Android studio 生成.so库小白模式

 

异常解决之后,然后rebuild 项目在找到了梦寐以求的.so

Android studio 生成.so库小白模式

3.在MainActivity中添加新的native方法,编译没有问题,但是在运行的时候,出现异常:

No implementation found for java.lang.String com.xxx.jnitestdemo2.MainActivity.getMyString()

Android studio 生成.so库小白模式

然后在对应的cpp文件中,添加方法:

Android studio 生成.so库小白模式

解决方法:

在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());
    }
}