本文共 2203 字,大约阅读时间需要 7 分钟。
D:\jni_workspace\JNIHelloWorld\bin\classes>
执行命令:javah com.atguigu.jnihellworld.MainActvity
或者:com.atguigu.jnihellworld.MainActvity
执行后生成文件:com_atguigu_jnihelloworld_MainActivity.h如图
文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_atguigu_jnihelloworld_MainActivity */
#ifndef _Included_com_atguigu_jnihelloworld_MainActivity
#define _Included_com_atguigu_jnihelloworld_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_atguigu_jnihelloworld_MainActivity
* Method: hello_111_2_5_hehe_From_C
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_atguigu_jnihelloworld_MainActivity_hello_1111_12_15_1hehe_1From_1C
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
#include<stdio.h>
#include<stdlib.h>
#include<jni.h>//这个头文件必须得有。里面包含jni对应的方法和类型;
JNIEXPORT jstring JNICALL Java_com_atguigu_jnihelloworld_MainActivity_hello_1111_12_15_1hehe_1From_1C
(JNIEnv *env, jobject obj){
char* text = "I am from c hello afu hello2.c";
return (*env)->NewStringUTF(env,text);
}
LOCAL_SRC_FILES := Hello2.c
注意: 不同版本的JDK操作方式不同.
命令: javah <包名+类名>
JDK1.6使用方式
在当前工程的bin/classes目录下, 执行javah命令.
JDK1.7使用方式
在工程的src目录下, 执行javah命令.
javah cn.atguigu.ndk2.DemoActivity
重新创建一个工程演示CommonErrorDemo
Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk
解决方案:在jni目录下创建一个Android.mk文件
"Compile thumb : atguigu31 <= Hello.c
jni/Hello.c:4:1: error: unknown type name 'JNIEXPORT'
jni/Hello.c:4:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before
'JNICALL'
jni/Hello.c:4:19: error: unknown type name 'JNICALL'
jni/Hello.c:6:3: error: parameter name omitted
No implementation found for native
Lcom/atguigu/commonerrordemo/MainActivity;.helloFromC ()Ljava/lang/String;
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libatguigu31.so: findLibrary returned null
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。