1. 写java代码
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); testHello("testHello"); } static{ System.loadLibrary("testjni"); } private native void testHello(String str);
2. 利用javah生成头文件
javah -classpath A -d B C
javah -classpath bin/classes -d jni/src com.example.test.MainActivity
-classpath A A表示类路径
-d B B表示头文件生成目录
C表示包名.类名
注:在这一步里在win7下怎么都生成不了,一直报有错
错误: 无法访问android.app.Activity
找不到android.app.Activity的类文件
javah路径是指向jdk路径的,不可能有什么问题,命令行就这些,直接在linux下执行了一次,没问题,真不知问题出在哪?
补充:
对于这个错,可以通过增加android.jar来解决
javah -classpath "D:\Download\adt-bundle-windows-x86_64-20131030\sdk\platforms\android-17\android.jar;bin/classes" -d jni/src com.example.audiotest.MainActivity
3. 建立jni文件夹,根据头文件写c代码,写Android.mk
目录树结构如下
audiotest.c
#include <stdio.h> #include <android/log.h> #include "com_example_audiojnitest_MainActivity.h" JNIEXPORT void JNICALL Java_com_example_audiojnitest_MainActivity_testHello (JNIEnv *env, jobject obj, jstring str) { char *p = (char *)(*env)->GetStringUTFChars(env, str, JNI_FALSE); __android_log_print(ANDROID_LOG_ERROR, "audiotest", p) ; return ; }
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := testjni LOCAL_SRC_FILES := src/audiotest.c LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
4. 执行结果可以在eclipse里看到