今天试着在Ubutnu环境下,编写了一个NDK的helloworld的程序,并在此归纳总结想下:

1.首先建一个Android Project工程,并创建一个类,如下:


2.通常使用的是Eclipse开发工具,Eclipse会自动编译生成.class文件,如没有采用自动话编辑工具,可以使用javac工具进行编译,生成对应的.class文件。



3. 在项目根目录下面新建jni文件夹,并使用javah 工具 生成对应的.h

进入项目的/bin/classes 目录下,然后运行如下命令:

把生成的.h拷贝到jni文件下面


或者直接在项目根目录下面运行如下命令:

-classpath bin:表示类的路劲
-d jni: 表示生成的头文件存放的目录
com.example.hellojni.HelloJni 则是完整类名

备注:如有提示javah工具没有,但的确自己已经安装了,那是因为/usr/bin/ 目录下没有相应的链接,使用下面命令创建链接或者设置相应的环境变量即可


然后在该目录下就可以找到自己需要的.h文件了,具体内容如下:

4.编写.c文件


5.编写Android.mk文件 类似与makefile


LOCAL_PATH := $(call my-dir)
一个Android.mk 文件首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
include $( CLEAR_VARS)
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),
除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
LOCAL_MODULE := hello-jni
编译的目标对象,LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。
注意:编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'hello-jni'的共享库模块,将会生成'libhello-jni.so'文件。
重要注意事项:
如果你把库命名为‘libhello-jni’,编译系统将不会添加任何的lib前缀,也会生成 'libhello-jni.so',这是为了支持来源于Android平台的源代码的Android.mk文件,如果你确实需要这么做的话。
LOCAL_SRC_FILES := hello-jni.c
LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。
注意,默认的C++源码文件的扩展名是’.cpp’. 指定一个不同的扩展名也是可能的,只要定义LOCAL_DEFAULT_CPP_EXTENSION变量,不要忘记开始的小圆点(也就是’.cxx’,而不是’cxx’)
include $(BUILD_SHARED_LIBRARY)
BUILD_SHARED_LIBRARY表示编译生成共享库,是编译系统提供的变量,指向一个GNU Makefile脚本,负责收集自从上次调用'include $(CLEAR_VARS)'以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做。还有 BUILD_STATIC_LIBRARY变量表示生成静态库:lib$(LOCAL_MODULE).a, BUILD_EXECUTABLE 表示生成可执行文件。

6 在项目根目录下面运行ndk-build 生成相应的.so文件
7.在相应的Activity 中调用并显示出来


至此,一个helloworld工程就OK了。


更多相关文章

  1. [置顶] Android开发之动态库调用
  2. android 文件上传的类--完整 可以直接被调用的
  3. Android分享笔记(4) Android的webview加载本地html、本apk内html
  4. Android(安卓)开发上奇怪的问题
  5. [Android]attrs.xml文件中属性类型format值的格式
  6. AIDL介绍和实例讲解
  7. Android探索之旅 | AIDL原理和实例讲解
  8. Android(安卓)NDK之JNI使用例子
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android中RelativeLayout及TableLayout使
  2. Android屏幕适配之修改系统density
  3. Android service 服务 笔记
  4. Android 读取 短信 信息
  5. Android(安卓)Studio快捷键
  6. android连接数据库
  7. Android驱动入门系列(一)
  8. Android 属性系统: Android Property Syst
  9. Android作为客户端,采用Netty与服务器通信
  10. ListView中item点击的时候颜色变化