Android NDK开发初步

【Android NDK开发初步】笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述Android NDK开发初步相关的知识,希望能为你提供帮助。
在配置好NDK开发之后就能够使用C/C++开发android了。以下以一个HelloWorld项目来说明
1.新建一个Androidproject
新建一个HelloWorldproject
代码例如以下

  1. package  com.zhycheng;    
  2. import  android.app.Activity;    
  3. import  android.os.Bundle;    
  4. import  android.widget.TextView;    
  5.    
  6. public  class  HelloWorldActivity  extends  Activity  {   
  7.         /**  Called  when  the  activity  is  first  created.  */   
  8.         @Override   
  9.         public  void  onCreate(Bundle  savedInstanceState)  {   
  10.                 super.onCreate(savedInstanceState);    
  11.                 TextView  tv=new  TextView(this);    
  12.                 tv.setText(srringFromCpp());    
  13.     setContentView(tv);   }   
  14. public  native  String  srringFromCpp();    
  15. static  {  System.loadLibrary("HelloWorld");   }}   



System.loadLibrary("HelloWorld"); 中的HelloWorld是动态链接库libHelloWorld.so
2 生成头文件和源文件
先在project文件夹下新建一个文件夹叫做jni
如今我要使用javah这个工具生成头文件
在project的文件夹下运行命令
[email  protected]:~/androidworkspace/HelloWorld$ javah -classpath bin/classes -d jni com.zhycheng.HelloWorldActivity
这时在jni目录下就生成了com_zhycheng_HelloWorldActivity.h头文件。内容例如以下
  1. /*  DO  NOT  EDIT  THIS  FILE  -  it  is  machine  generated  */   
  2. #include  < jni.h>    
  3. /*  Header  for  class  com_zhycheng_HelloWorldActivity  */   
  4.    
  5. #ifndef  _Included_com_zhycheng_HelloWorldActivity   
  6. #define  _Included_com_zhycheng_HelloWorldActivity   
  7. #ifdef  __cplusplus   
  8. extern  "C"  {   
  9. #endif   
  10. /* 
  11.   *  Class:          com_zhycheng_HelloWorldActivity 
  12.   *  Method:        srringFromCpp 
  13.   *  Signature:  ()Ljava/lang/String;  
  14.   */   
  15. JNIEXPORT  jstring  JNICALL  Java_com_zhycheng_HelloWorldActivity_srringFromCpp   
  16.     (JNIEnv  *,  jobject);    
  17.    
  18. #ifdef  __cplusplus   
  19. }   
  20. #endif   
  21. #endif   
  22. 在这个文件中,我们能够得到srringFromCpp的函数名。   
  23. 以下我在jni目录里新建一个HelloWord.c文件内容例如以下   
  24. #include  < string.h>    
  25. #include  < jni.h>    
  26. JNIEXPORT  jstring  JNICALL  Java_com_zhycheng_HelloWorldActivity_srringFromCpp   
  27.     (JNIEnv  *env,  jobject  obj)   
  28. {   
  29.   return  (*env)-> NewStringUTF(env,"张译成");    
  30. }   



这里还要在jni文件夹里新建一个Android.mk文件。内容例如以下
  1. LOCAL_PATH:=  $(call  my-dir)   
  2.    
  3. include  $(CLEAR_VARS)   
  4.    
  5. LOCAL_MODULE  :=  HelloWorld   
  6.    
  7. LOCAL_SRC_FILES:=  HelloWorld.c   
  8.    
  9. include  $(BUILD_SHARED_LIBRARY)   





4 生成动态链接库
在project文件夹里运行以下的命令
  1. [email  protected]:~/androidworkspace/HelloWorld$  ndk-build   
  2. Compile  thumb    :  HelloWorld  < =  HelloWorld.c   
  3. SharedLibrary    :  libHelloWorld.so   
  4. Install                :  libHelloWorld.so  =>   libs/armeabi/libHelloWorld.so   



这样就得到了libHelloWorld.so文件。这个文件在libs/armeabi目录里。
5 执行整个project
Android NDK开发初步

文章图片



能够看到。在界面上显示了从动态链接库返回的字符串。



































    推荐阅读