android NDK开发环境搭建(windows) 最新整理 截止2012年9月

     网上有好多搭建ndk的帖子,但是发现有些不可行,自己总结了下,使用现在最新的环境,截止到2012年9月底。把ndk的开发环境重新搭建了下,总结之,供大家一起参考或学习。

首先下载和安装java环境, JDK,1.6与1.7皆可。我下载安装的是jdk1.7
http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装到得是D盘,配置JAVA_HOME,与Path等Java参数。
下载eclipse
http://www.eclipse.org/downloads/download.php?

file=/technology/epp/downloads/release/juno/SR1/eclipse-java-juno-SR1-win32.zip
下载android SDK
   http://developer.android.com/sdk/index.html
  下载android ADT
介绍:  http://developer.android.com/sdk/installing/installing-adt.html

地址:  http://dl.google.com/android/ADT-20.0.3.zip

以上是android开发环境需要的资源。我用的是xp32位,把android开发环境搭建好。现在开始着重介绍如何

做NDK开发的准备工作。  

下载NDK开发包
介绍:  http://developer.android.com/tools/sdk/ndk/index.html
下载地址:  http://dl.google.com/android/ndk/android-ndk-r8b-windows.zip

解压后查看目录,看 android-ndk-r8b文件夹里有ndk-build.cmd的命令参数,需要用这个
命令。把这个路径添加到系统Path路径里。我这里的相对路径是
E:\ndk\android-ndk-r8b
在cmd 命令行里执行 ndk-build
出现以下错误,说明环境配置成功。
C:\Documents and Settings\Administrator>ndk-build
Android NDK: Your Android application project path contains spaces: 'C:/ ./ Sett
ings/'
Android NDK: The Android NDK build cannot work here. Please move your project to
a different location.
E:\ndk\android-ndk-r8b\build/core/build-local.mk:137: *** Android NDK: Aborting.
    .  Stop.
现在进入 ndk 里的 android-ndk-r8b\samples\hello-jni\jni 相对目录里,执行ndk-build


E:\ndk\android-ndk-r8b\samples\hello-jni\jni>ndk-build
Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

说明,NDK环境已经配好,可以编译了。


你可以进入其他samples里的项目,到jni文件夹下执行ndk-build都可以,顺利编译成功生成
so文件,如果在以后的开发需要重新生成so文件可以执行,ndk-build -B 可以实现强制重新编译
生成so文件的操作。

E:\ndk\android-ndk-r8b\samples\hello-jni\jni>ndk-build  -B
"Compile thumb : hello-jni <= hello-jni.c
SharedLibrary  : libhello-jni.so
Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

下面开始介绍创建ndk的Android项目。
ndk不是什么新技术,其实就是对java的jni技术的重新封装,并添加了些android内部的各种类库。
所以,ndk的开发依赖java的jni,需要java支持,其中需要使用命令行生成h头文件。懂c/c++开发
的人知道h头文件的作用,类似于java里的接口。


在Android工程文件夹下命名jni的文件夹,执行命令生成h文件。


E:\workspace\HelloJni>javah -classpath bin\classes  -d jni com.example.hellojni.Utils //含有

native方法的类对象。最好只还有javase里的类,不要含有android里的类。

-classpath <path>        从中加载类的路径
-d <dir>                 输出目录
-jni                     生成 JNI 样式的标头文件 (默认值)
在jni下会生成:
com_example_hellojni_Utils1.h文件。

新建 .mk文件,添加以下信息
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := my-jni   // System.loadLibrary("my-jni"); 需要时引用的名字
LOCAL_SRC_FILES := my-jni.c   //需要编译的c文件,如果是多个文件,就需要添加多个文件
include $(BUILD_SHARED_LIBRARY)

把头文件h,包含到C文件里,实现这些接口就可以,然后使用ndk-build,获得so文件,就可以使用了。其

中需要注意的是,头文件里的方法声明,直接拷到C文件里会出错,编译不过。是因为缺省的参数,你需要添

加,需要的参数名字就可以,名字随意。

头文件h如:

extern "C" {
#endif
/*
* Class:     com_example_hellojni_Utils
* Method:    stringFromJNI
* Signature: (Ljava/lang/String;[BI)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_hellojni_Utils_stringFromJNI
  (JNIEnv *, jobject, jstring, jbyteArray, jint);//缺省参数名字

/*
* Class:     com_example_hellojni_Utils
* Method:    regitster
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_example_hellojni_Utils_regitster
  (JNIEnv *, jobject);//缺省参数名字

#ifdef __cplusplus
}
==============================
/*com_example_hellojni_Utils.h
* Class:     com_example_hellojni_Utils
* Method:    stringFromJNI
* Signature: ()Ljava/lang/String;
*/
jstring Java_com_example_hellojni_Utils_stringFromJNI(JNIEnv * env , jobject this,jstring log , 

jbyteArray data , jint type)// env this log data type 是对参数名字的任意命名
  {
        return (*env)->NewStringUTF(env, "fromjni ");
  }
/*
* Class:     com_example_hellojni_Utils
* Method:    regitster
* Signature: ()V
*/
void Java_com_example_hellojni_Utils_regitster(JNIEnv * env, jobject this)
{// env this 是对参数名字的任意命名
}

这样就可以把基本的开发环境搭好了。另外还有其他的方式,不用javah命令也可以实现ndk,自己可以参看
samples里的例子。还有ndk其他一些特殊要求,动态类库,静态类库等等。在这里实现的opengl等。可以查
看samples里的例子,各种其他需求,提出来大家一起讨论修改解决之。







 该贴已经同步到 sinxiao的微博
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值