今天试着在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. Mac配置Android开发环境变量及工具安装图
  2. [Android]attrs.xml文件中属性类型format值的格式
  3. Android强制使用WebView不调用系统或外部浏览器
  4. Android中如何获得一些系统设置和环境变量?
  5. Android系统层次结构及分析
  6. 如何让Android中的 Base64工具类支持2.2以下的系统

随机推荐

  1. Android(安卓)Studio常用快捷键、Android
  2. 如何一个android工程作为另外一个android
  3. Android创建和使用数据库详细指南
  4. 创建一个ArcGIS for Android(安卓)新项目
  5. Android音频简介
  6. 多款Android播放器源码集锦(附开发教程)
  7. 推翻自己和过往,重学自定义View
  8. Linux内核怎样启动Android
  9. Android中的消息处理实例与分析
  10. Android:什么情况?