如题,接下来讲的是开发NDK的一个小列子,可以让大家了解一下开发Android NDK的流程,在工作中,由我老大教给我的,加上自己理解,如有问题还请高手们指教!

(1)首先介绍自己的开发环境:Ubuntu下开发eclipse+android+ndk,其中配置android的开发环境网上肯定有不少,这里就不多介绍了,ndk就是自己下载一个就可以,有windows和linux的版本。还需要有点JNI的基础知识,我也刚学就不多说了。

(2)其次,新建一个android项目ndk_hello,配置如图:

在包ndk.test下新建一个类NDKLib,其中编写代码:

public class NDKLib {static{System.loadLibrary("ndk_hello");}public native String hello();}
这里需要用到JNI的知识,nativie这个关键字,在整个项目中我们不会用到java语言来编写hello()这个方法,是会调用C后者C++的hello()方法。

其中static中的内容“ndk_hello”是对应的找到C的类,和之后的android.mk保持一致。

(3)找到你下载的ndk,打开apps文件夹,新建一个文件ndk_hello,此时点击F3,打开另一个窗口,找到你的工作目录,将你新建的项目创建快捷方式,拷贝到ndk_test下,将拷贝过来的快捷方式改名为project(只是规定),之后再在终端打开:(打如下指令)



在apps/ndk_hello下新建一个文件:Application.mk,内容如下:(大家在做上面那步应该先做建立这个文件才能成功,不好意思顺序弄错了)

APP_PROJECT_PATH := $(call my-dir)/projectAPP_MODULES      := ndk_hello

(4)之后就是对之前写过的NDKLib进行处理,我的ubuntu下的文件夹名是yandong,按照你们机器的处理,我的工作目录是在yandong/java/workplace


顺序是:①找到新建的项目,项目/bin,编译ndk.test.NDKLib(javah ndk.test.NDkLib),在项目的lib文件下会自动生成一些东西。

②mkdir jni 新建一个jni的文件夹

③由第一步编译生成的.h文件拷贝到这个jni文件夹下

(5)此时在eclipse下刷新自己的项目,找到jni下的.h文件,此时这个.h文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class ndk_test_NDKLib */#ifndef _Included_ndk_test_NDKLib#define _Included_ndk_test_NDKLib#ifdef __cplusplusextern "C" {#endif/* * Class:     ndk_test_NDKLib * Method:    hello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_ndk_test_NDKLib_hello  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
在jni文件夹下创建一个.c的文件,雷同.h的文件名,编写内容如下:

#include "ndk_test_NDKLib.h"JNIEXPORT jstring JNICALL Java_ndk_test_NDKLib_hello  (JNIEnv * env, jobject obj) {return (*env)->NewStringUTF(env, "Hello World NDK!!");}

其中include中导入的是自己生成的头文件,里面的方法名要和之前头文件里面的方法名一致。此时的头文件就类似java的接口。

(6)在jni下新建一个文件:Android.mk,其中编写内容如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := ndk_helloLOCAL_SRC_FILES := ndk_test.cinclude $(BUILD_SHARED_LIBRARY)

其中ndk_test是在NDKLib类中定义的名字,ndk_test.c是在jni下新建的C文件。

(7)到这为止NDK的开发流程基本结束了,最后一步就是显示Hello World NDK!

这一步就很简单了,在activity那个里面设置一个TextView,调用这个就可以了:

package ndk.test;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class NDKTest extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);TextView tv = (TextView) this.findViewById(R.id.text);tv.setText(new NDKLib().hello());}}

显示效果图如下:


到这里Hello World NDK就结束了,其中为了演示从新建的工程,可能有点出入,但是最好保证项目名与jni下的android.mk中的(LOCAL_MODULE := ndk_hello)和ndk中apps下的项目里的Application.mk(APP_MODULES := ndk_hello)等保持一致最好了。

还请大家一起讨论一下关于学习NDK的开发了,感觉关于开发NDK的例子比较少,也请各位高手多多指点!

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  7. Android(安卓)通过读取本地Arp表获取当前局域网内其他设备信息
  8. Android(安卓)Database【origin】
  9. Android生存指南之:解Bug策略与思路问题的详解

随机推荐

  1. 百度地图 android SDKv2.2.0
  2. Android官方刷新组件 SwipeRefreshLayout
  3. 【整理】Android(安卓)animation - 基础
  4. Android(安卓)开发之v4库冲突问题解决方
  5. Android 基本按钮
  6. Android(安卓)& Java 注释模板的设置
  7. android 发送邮件到QQEmail
  8. Android Studio 编译报错:Manifest merger
  9. android的Android Please ensure that ad
  10. android平台下基于ffmpeg的swscale模块实