Android JNI CMAKE:成员引用类型'JNIEnv'(又名'_JNIEnv')不是指针

时间:2017-11-27 05:03:59

标签: android cmake android-ndk ndk-build

我有gradle app模块:

externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }

使用CMakeLists.txt:

cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library.
             native-lib
             SHARED
             src/main/cpp/native-lib.cpp )
add_library( # Sets the name of the library.
             keys
             SHARED
             src/main/cpp/keys.cpp )
find_library( # Sets the name of the path variable.
              log-lib
              log )
target_link_libraries( # Specifies the target library.
                       native-lib
                       ${log-lib} )

和keys.cpp:

#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_my_app_App_getApplicationKey(JNIEnv *env, jobject instance) {
    return (*env)->  NewStringUTF(env, "PuTy0uR4Ppl1C4TioNk3yH3re");
}

我一直在我的cpp中遇到:

  

错误:(5,18)错误:成员引用类型'JNIEnv'(又名'_JNIEnv')是   不是指针;你的意思是使用'。'吗?

或者如果我在Android工作室滚动我的鼠标,它说:

  

应用' - &gt;'运算符到JNIEnv而不是指针

我在这里错过了什么,NewStringUTF是jni.h库的一部分,但为什么它没有“链接”?

1 个答案:

答案 0 :(得分:0)

我用以下方法修复:

#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring

JNICALL
Java_com_my_app_App_getApplicationKey(JNIEnv *env, jobject instance) {
    std::string appKey = "PuTy0uR4Ppl1C4TioNk3yH3re";
    return env->NewStringUTF(appKey.c_str());
}

解决了我的问题,

对我来说,唯一仍然神秘的是:

我的keys.cpp以上参考文献:Securing API Keys using Android NDK文章完全正常。

当我改变

ndkBuild {
            path 'src/main/jni/Android.mk'
        }

externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }
}

下面的代码不起作用:

#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_my_app_App_getApplicationKey(JNIEnv *env, jobject instance) {
    return (*env)->  NewStringUTF(env, "PuTy0uR4Ppl1C4TioNk3yH3re");
}