我有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库的一部分,但为什么它没有“链接”?
答案 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");
}