添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1、 执行ndk-build 提示error: request for member 'FindClass' in something not a structure or union
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:33:30: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a structure or union
jclass native_class = env->GetObjectClass(contextObject);
~~~^ ~~~~~~~~~~~~~~
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:34:26: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a
structure or union
jmethodID pm_id = env->GetMethodID(native_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");
~~~^ ~~~~~~~~~~~
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:35:25: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a
structure or union
jobject pm_obj = env->CallObjectMethod(contextObject, pm_id);
~~~^ ~~~~~~~~~~~~~~~~
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:36:26: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a
structure or union

错误原因:env变量在C和C++ 语法表达不一致引起。
C++   : env ->FindClass("java/lang/String")
C语言: (*env) ->FindClass(env, "java/lang/String")



2、No rule to make target needed by *.o
make: *** No rule to make target `x x x/xxxx/xxx/xx.c', needed by `x x x/xxxx/xxx/xx.c.o'.  Stop.
错误原因:Android.mk没有修改文件后缀名,如原来是 LOCAL_SRC_FILES := test.c,修改成

step1)LOCAL_SRC_FILES := test.cpp
step2)删除/
app/src/main/obj/local 文件夹

3、返回一个字符串报错: error: too many arguments to function call, expected single argument 'bytes', have 2 arguments
return env->NewStringUTF(env,"This is my first NDK Application");
~~~~~~~~~~~~~~~~~     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/lvxiangan/ProgramFiles/AndroidStudio/Sdk/ndk-bundle/sysroot/usr/include/jni.h:840:5: note: 'NewStringUTF' declared here
jstring NewStringUTF(const char* bytes)
^
1 error generated.

1、执行ndk-build 提示error: request for member 'FindClass' in something not a structure or union/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:33:30: error: member reference base ty... Error: NDK integration is deprecated in the current plugin. "android.useDeprecated Ndk =true" 在项目的根目录的 gradle.properties 文件(无则添加 as从项目开始一直默认有的) 添加此行: androi
1.关于JNIEnv和JavaVM  JNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立。JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线程都可以使用这个JavaVM。当后台线程需要调用JNI native时,在native库中使用全局变量保存JavaVM尤为重要,这样使得后台线程能通过JavaVM获得JNIEnv。 2. 配置 NDK 路径 打开Android Studio,选择File -> Project Structure,在左侧的菜单中选择SDK Location,然后在右侧的 NDK location中输入你的 NDK 路径。 3. 创建jni目录 在你的项目根目录下创建一个名为jni的文件夹。 4. 创建C/C++文件 在jni目录下创建一个名为hello-jni.c的文件,并输入以下代码: #include <jni.h> #include <string.h> jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz) return (*env)->NewStringUTF(env, "Hello from JNI!"); 5. 创建Android.mk文件 在jni目录下创建一个名为Android.mk的文件,并输入以下代码: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) 6. 创建Application.mk文件 在jni目录下创建一个名为Application.mk的文件,并输入以下代码: APP_ABI := all 7. 构建项目 在Android Studio中选择Build -> Make Project,然后等待构建完成。 8. 运行项目 在Android Studio中选择Run -> Run 'app',然后等待应用程序启动。 以上就是Android Studio配置 NDK 的步骤,希望对你有所帮助。