您的位置:首页 > 移动开发 > Android开发

android jni调用

2013-11-09 22:16 253 查看
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 ;
}


Android.mk

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里看到

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: