android jni调用

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值