怎样实现在Eclipse中开发NDK?
2013-03-05 16:40
302 查看
1. 新建Android项目
如project1,项目Location:位于android工作目录下;
2.编写Android项目java代码,调用JNI层,包含两点
1)static
{
try {
System.loadLibrary("project1"); //加载jni
} catch (UnsatisfiedLinkError ule) {
System.err.println("WARNING: Couldnot load library!");
}
}
2)native函数
如:public
staticnative String getString();
3.获取.h文件(执行javah)
1)在项目bin目录下找到对应类的.class文件,对.class文件执行javah
2)javah
_classpath.class所在路径–d
.h生成的目录 .class所在的包名.类名
如:javah _classpath
E:\project\workspace\workspace2\project1\bin\classes -d E:\project\workspace\workspace2\project1\bin\classes\com\example\project1 com.example.project1.MainActivity
3)根据.h文件(JNI头文件),编写JNI代码
JNIEXPORT jstring JNICALL
Java_com_example_project1_MainActivity_getString(JNIEnv *, jclass);
4.编写JNI代码
1)找到你的ndk安装目录,如D:\Java\android-ndk-r8d\samples,在samples目录下新建一个文件如project1,在此文件中新建两个文件:jni和src;
2)src可以为空,jni中编写native函数和Android.mk文件
如:native函数
Project1.c
#include "jni.h"
#include <stdio.h>
#include <string.h>
#include <android/log.h>
#define LOG_TAG "PROJECT1"
#define LOGI(...)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
JNIEXPORT jstring JNICALLJava_com_example_project1_MainActivity_getString
(JNIEnv *env, jclass jcls)
{
LOGI(“ PROJECT1_getString In ”);
return(*env)->NewStringUTF(env,”SUCCESS GET INFORMATION !”);
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=project1
LOCAL_SRC_FILES := project1.c
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)
3) ndk运行生成动态库.so
运行安装目录下的“Cygwin.bat”,在运行“Cygwin.bat”打开的命令行窗口输入:
cd $ndk
(目的,找到要运行程序的路径,此时默认进入了ndk安装目录D:\Java\android-ndk-r8d)
1.运行:cd$ndk/samples/hello-jni
2.编译:$ndk/ndk-build
3.到”…/hello-jni/libs/armeabi“目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!
5.整合Android项目和ndk开发(生成.so这部分)
1)把Android项目拷贝到D:\Java\android-ndk-r8d\samples目录下,把刚才的ndk环境的project1文件下的子目录都拷贝到Android项目下,通src一个目录级别;
2)在Eclipse中导入此整合后的Android项目,注意保持此时ndk工作目录,不要把此项目导入到Eclipse的工作目录下;
6.运行Eclipse即可执行代码
7.如果修改了jni中project1.c的代码
1)重新执行<ndk运行生成动态库.so>
2)Eclipse中要执行Project/Clean此项目
3)再次运行Android项目即可
如project1,项目Location:位于android工作目录下;
2.编写Android项目java代码,调用JNI层,包含两点
1)static
{
try {
System.loadLibrary("project1"); //加载jni
} catch (UnsatisfiedLinkError ule) {
System.err.println("WARNING: Couldnot load library!");
}
}
2)native函数
如:public
staticnative String getString();
3.获取.h文件(执行javah)
1)在项目bin目录下找到对应类的.class文件,对.class文件执行javah
2)javah
_classpath.class所在路径–d
.h生成的目录 .class所在的包名.类名
如:javah _classpath
E:\project\workspace\workspace2\project1\bin\classes -d E:\project\workspace\workspace2\project1\bin\classes\com\example\project1 com.example.project1.MainActivity
3)根据.h文件(JNI头文件),编写JNI代码
JNIEXPORT jstring JNICALL
Java_com_example_project1_MainActivity_getString(JNIEnv *, jclass);
4.编写JNI代码
1)找到你的ndk安装目录,如D:\Java\android-ndk-r8d\samples,在samples目录下新建一个文件如project1,在此文件中新建两个文件:jni和src;
2)src可以为空,jni中编写native函数和Android.mk文件
如:native函数
Project1.c
#include "jni.h"
#include <stdio.h>
#include <string.h>
#include <android/log.h>
#define LOG_TAG "PROJECT1"
#define LOGI(...)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
JNIEXPORT jstring JNICALLJava_com_example_project1_MainActivity_getString
(JNIEnv *env, jclass jcls)
{
LOGI(“ PROJECT1_getString In ”);
return(*env)->NewStringUTF(env,”SUCCESS GET INFORMATION !”);
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=project1
LOCAL_SRC_FILES := project1.c
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)
3) ndk运行生成动态库.so
运行安装目录下的“Cygwin.bat”,在运行“Cygwin.bat”打开的命令行窗口输入:
cd $ndk
(目的,找到要运行程序的路径,此时默认进入了ndk安装目录D:\Java\android-ndk-r8d)
1.运行:cd$ndk/samples/hello-jni
2.编译:$ndk/ndk-build
3.到”…/hello-jni/libs/armeabi“目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!
5.整合Android项目和ndk开发(生成.so这部分)
1)把Android项目拷贝到D:\Java\android-ndk-r8d\samples目录下,把刚才的ndk环境的project1文件下的子目录都拷贝到Android项目下,通src一个目录级别;
2)在Eclipse中导入此整合后的Android项目,注意保持此时ndk工作目录,不要把此项目导入到Eclipse的工作目录下;
6.运行Eclipse即可执行代码
7.如果修改了jni中project1.c的代码
1)重新执行<ndk运行生成动态库.so>
2)Eclipse中要执行Project/Clean此项目
3)再次运行Android项目即可
相关文章推荐
- Android Eclipse+ADT+SDK+NDK+OpenGL在Ubuntu进行安卓纯C/C++开发实现
- NDK-Jni的开发 在Eclipse中实现
- Android开发中使用NDK在Eclipse中实现JNI技术
- cocos2dx移植eclipse后,用ndk来开发,实现放弃vs,eclipse写c++代码
- Eclipse中集成Ant实现快速开发
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境
- Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境
- 在Eclipse插件开发中, 实现标准的Search功能
- 实现热部署时记得设置eclipse开发工具
- Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建
- Eclipse—怎样为Eclipse开发工具中创建的JavaWebproject创建Servlet
- 解决NDK开发中Eclipse报错“Unresolved inclusion jni.h”的最终方法
- 在eclipse中快速开发JNI(不使用Cygwin,一键生成C头文件.h,以及一键使用NDK交叉编译)
- android 开发button按下有震动怎样实现
- 解决NDK开发中Eclipse报错“Unresolved inclusion jni.h”的最终方法
- Eclipse下NDK开发与调试
- Eclipse下NDK开发与调试
- eclipse开发cocos2dx 3.2环境搭建之一: Android C\C++环境搭建(ndk r9d)
- NDK开发(五):Android JNI层实现文件的read、write与seek操作