创建第一个NDK程序
2014-03-20 17:28
525 查看
初学NDK开发,感觉不知道如何上手,参考的书籍是《Android NDK Beginner's Guide》,照着做时出现各种错误,折腾好久,终于搞定第一个实例,与大家分享如何从头创建一个NDK程序,希望能让后来者少走些弯路,如有大神路过,也请批评指正。
废话不多说,Getting Started!
在这里我新建一个Hello_JNI的应用,目录结构与普通的Android应用完全相同,包名为com.k2048.hello_jni,类名是MainActivity。如果直接运行的话可以看到是一个一个Hello World的APP。
LOCAL_PATH :=
$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := com_k2048_hello_jni_MainActivity.c
include$(BUILD_SHARED_LIBRARY)
Javah –classpath. –jni com.k2048.hello_jni.MainActivity
执行结果如下:
将会在classes目录下生成com_k2048_hello_jni_MainActivity.h文件。
然后再CMD中将目录回退到工程目录下,执行:
ndk-build
执行结果如下:
在工程中刷新后会发现libs文件夹变为:
这是我的配置:
此处应该是类路径描述错误,但是Arguments不知后面的类路径怎么配置,恳请各路大神赐教。
代码请移步:http://download.csdn.net/detail/zlyf1101/7072901
PS:创建成功后悲剧的发现,网上有《AndroidNDK Beginner's Guide》前两章的中文版,可怜我看了一上午的英文……o(╯□╰)o,前两章中文版已随代码上传
废话不多说,Getting Started!
0x01 创建一个普通Android应用
这个应该不需要多说,Eclipse里选定选项一路next即可,下面是工程目录结构图:在这里我新建一个Hello_JNI的应用,目录结构与普通的Android应用完全相同,包名为com.k2048.hello_jni,类名是MainActivity。如果直接运行的话可以看到是一个一个Hello World的APP。
0x02 声明native方法
将MainActivity修改如下:public class MainActivity extendsActivity { publicnative String getMyData();//声明native方法 //在静态代码块中加载native库 static{ System.loadLibrary("mylib"); } @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle(getMyData());//修改要显示的文字 } }
0x03 创建Android.mk文件
在工程根目录下新建一个jni文件夹(必须是这个名字),然后在此文件夹下创建Android.mk,内容如下:LOCAL_PATH :=
$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := com_k2048_hello_jni_MainActivity.c
include$(BUILD_SHARED_LIBRARY)
0x04 使用javah生成头文件
打开CMD窗口,进入到工程目录的bin\class目录下,因为javah通过.class文件生成头文件。执行如下命令:Javah –classpath. –jni com.k2048.hello_jni.MainActivity
执行结果如下:
将会在classes目录下生成com_k2048_hello_jni_MainActivity.h文件。
0x05 实现native函数
将com_k2048_hello_jni_MainActivity.h放到jni目录下,然后在jni目录下新建com_k2048_hello_jni_MainActivity.c文件,写入如下内容:#include"com_k2048_hellojni_MainActivity.h" JNIEXPORT jstring Java_com_k2048_hello_1jni_MainActivity_getMyData (JNIEnv* pEnv, jobject pThis) { return (*pEnv)->NewStringUTF(pEnv,"My native project talks C++"); }
然后再CMD中将目录回退到工程目录下,执行:
ndk-build
执行结果如下:
在工程中刷新后会发现libs文件夹变为:
0x06 Run the Application!
经历以上几步之后,native库libmylib.so已经生成,可以直接选择Runas Android Application运行项目,NDK程序已成功执行:注:
Eclipse中配置javah使用,《AndroidNDK Beginner's Guide》可能描述的有误,我按照书中配好External Tools之后,出现如下错误:这是我的配置:
此处应该是类路径描述错误,但是Arguments不知后面的类路径怎么配置,恳请各路大神赐教。
代码请移步:http://download.csdn.net/detail/zlyf1101/7072901
PS:创建成功后悲剧的发现,网上有《AndroidNDK Beginner's Guide》前两章的中文版,可怜我看了一上午的英文……o(╯□╰)o,前两章中文版已随代码上传
相关文章推荐
- NDK入门(一) 在Android Studio中创建并运行第一个ndk程序hello world
- Android NDK:②第一个NDK程序(创建步骤&一些问题)
- C++游戏之创建第一个窗体程序(一)
- 1、创建第一个swift程序(系统是OS X 10.11,工具是Xcode7.1)
- 创建第一个servlet程序--HelloServlet
- titanium开发教程-01-01创建你第一个程序
- 1.5 eclipse 创建第一个web程序
- Ogre学习笔记(二)创建第一个OGRE程序
- NDK开发之——eclipse配置以及第一个NDK程序
- PyQt5 - 01 使用qt creator创建第一个pyqt5界面程序
- Ubuntu12.04下安装Qt4和创建第一个Qt程序
- Android Studio运行第一个NDK程序
- WCF教程-创建第一个WCF程序
- 创建第一个WCF程序
- Intellij Idea创建的第一个JavaWeb程序
- Java 技术基础笔记(2)—— 创建第一个Java程序 Hello World
- 创建第一个java程序
- 第二篇:创建第一个Android程序
- 创建第一个Android程序HelloWord
- 安装并创建第一个Node.js程序