歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android NDK開發初步

Android NDK開發初步

日期:2017/3/1 10:17:57   编辑:Linux編程

在配置好NDK開發之後就可以使用C/C++開發Android了(見 http://www.linuxidc.com/Linux/2012-07/64354.htm )。下面以一個HelloWorld項目來說明
1.新建一個Android工程
新建一個HelloWorld工程
代碼如下

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

System.loadLibrary("HelloWorld");中的HelloWorld是動態鏈接庫libHelloWorld.so

2 生成頭文件和源文件
先在工程目錄下新建一個文件夾叫做jni
現在我要使用javah這個工具生成頭文件
在工程的目錄下執行命令
www.linuxidc.com@linuxidc:~/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. #ifndef _Included_com_zhycheng_HelloWorldActivity
  5. #define _Included_com_zhycheng_HelloWorldActivity
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10. * Class: com_zhycheng_HelloWorldActivity
  11. * Method: srringFromCpp
  12. * Signature: ()Ljava/lang/String;
  13. */
  14. JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp
  15. (JNIEnv *, jobject);
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif
  20. 在這個文件裡,我們可以得到srringFromCpp的函數名。
  21. 下面我在jni文件夾裡新建一個HelloWord.c文件內容如下
  22. #include <string.h>
  23. #include <jni.h>
  24. JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp
  25. (JNIEnv *env, jobject obj)
  26. {
  27. return (*env)->NewStringUTF(env,"張譯成");
  28. }

這裡還要在jni目錄裡新建一個Android.mk文件,內容如下

  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE := HelloWorld
  4. LOCAL_SRC_FILES:= HelloWorld.c
  5. include $(BUILD_SHARED_LIBRARY)
Copyright © Linux教程網 All Rights Reserved