开发环境:

ubuntu 10.10 + eclipse + adt +android ndk + android sdk

1、新建简单项目:JNIDemo,

设计jni到java类:

package com.lt.jni
public class JNI {/** * call the native printf method to print */public native void print();public native String sayHello();}

2、在android到bin目录下,执行命令:

javah -jni com.lt.jni.JNI 来生成头文件:com_lt_jni_JNI.h

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_lt_jni_JNI */#ifndef _Included_com_lt_jni_JNI#define _Included_com_lt_jni_JNI#ifdef __cplusplusextern "C" {#endif/* * Class:     com_lt_jni_JNI * Method:    print * Signature: ()V */JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print  (JNIEnv *, jobject);/* * Class:     com_lt_jni_JNI * Method:    sayHello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif

3、在项目目录下,新建jni目录,并新建c源文件com_lt_jni_JNI.c:

#include <jni.h>#include <stdio.h>#include <string.h>#include <android/log.h>#include "com_lt_jni_JNI.h"/* * Class:     com_lt_jni_JNI * Method:    print * Signature: ()V */JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print  (JNIEnv *env, jobject obj){__android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_print");printf("Hello world!\n");return ;}JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello  (JNIEnv *env, jobject obj){__android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_sayHello");return (*env)->NewStringUTF(env,"Hello JNI");}

关键代码:#include <android/log.h>

__android_log_print(ANDROID_LOG_INFO,"TAG","log info");

4、在jni目录下新建Android.mk文件:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:=\

com_lt_jni_JNI.c

LOCAL_CFLAGS := -O2 -g

#LOCAL_CFLAGS += -D__FAVOR_BSD

#LOCAL_C_INCLUDES += \

# bionic/libc/include\

# external/libpcap

LOCAL_C_INCLUDES := \

$(JNI_H_INCLUDE)

#LOCAL_STATIC_LIBRARIES += libpcap

#LOCAL_SHARED_LIBRARIES += libssl libcrypto

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)

#LOCAL_MODULE_TAGS := eng

LOCAL_MODULE := helloworld

include $(BUILD_SHARED_LIBRARY)


其中关键代码: LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 因为在程序中使用来log模块,所以需要指定到依赖库log
5、在console中进行到项目目录执行命令进行构建: cd $HOME/workspace/JNIDemo $NDK/ndk-build ----------------------------------------------------------------------------------------------- lql@ubuntu:~/workspace/JNIDemo$ $NDK/ndk-build Compile thumb : helloworld <= com_lt_jni_JNI.c SharedLibrary : libhelloworld.so Install : libhelloworld.so => libs/armeabi/libhelloworld.so
6、将手机和电脑连接,然后运行项目,在logcat中观察是否有日志信息输出: 09-14 17:28:32.067: INFO/JNI(6821): Java_com_lt_jni_JNI_print 09-14 17:28:32.067: INFO/JNI(6821): Java_com_lt_jni_JNI_sayHello
备注: 在使用$NDK/ndk-build进行构建到时候,如果之前构建过多次,那么最后先执行$NDK/ndk-build clean来进行清理 因为,有时,如果共享库文件已经生成,那么再次构建到时候,默认貌似不覆盖,这样导致虽然改来代码,却看不到效果, 之前还因为这个耽误来不少时间,特意记下,希望给路过到朋友一点帮助!




更多相关文章

  1. android 更新版本号
  2. Android(安卓)Studio无法启动 打开, Android(安卓)Studio gradle
  3. EditText弹出软件盘时不进行全屏
  4. Android(安卓)UID 问题 uid 改变进行了覆盖安装
  5. Android(安卓)Gradle 构建工具(Android(安卓)Gradle Build Tools
  6. SuperBrowser简单游览器Android
  7. android 实现根据receiver的注册状态 进行register或unregister
  8. Android(安卓)NDK编译libPng为静态库
  9. Android(安卓)AIDE入门——Hello,world,用android给Android写程

随机推荐

  1. 快手内推
  2. Android S5PV210 camera驱动测试程序
  3. Android 应用程序结构介绍
  4. Android(安卓)Asynchronous Http Client
  5. Android本地语音识别引擎PocketSphinx-语
  6. 使用Android(安卓)OpenGL ES 2.0绘图之五
  7. 配置Android开发环境
  8. Android事件分发机制完全解析,带你从源码
  9. Android中图像变换Matrix的原理、代码验
  10. Eclipse 中打不开android sdk managerf