Android studio 生成.so庫小白模式

在網上有很多例子,使用的多是配置NDK,但是我按照那些例子一步一步走,也能編譯成功,但是結果就是生成不了NDK文件夾,也沒有.so庫.最終也沒能找到是什麼原因,但是在這裏看到了另外一種方法:https://blog.csdn.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());
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章