Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177130
  • 博文数量: 69
  • 博客积分: 2627
  • 博客等级: 少校
  • 技术积分: 715
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-24 22:37
文章分类

全部博文(69)

文章存档

2017年(3)

2014年(1)

2013年(4)

2012年(6)

2011年(21)

2010年(15)

2009年(19)

我的朋友

分类: 嵌入式

2010-12-29 22:10:54

beginning android ndk

linux: ubuntu 10

1. 下载ndk包, 解开后,设置 export NDK=/software/...  (/etc/profile)

2. 给eclipe加上C/C++语法支持, help->instll new software,
   href:  Galileo -
   清空 type filter text,才能显示出要选择的东西.
   选 programming language : c/c++ development tool
   下载后,重启eclipse

3. 新建Android project,在activity里写上如下native方法:
   private native String invokeNativeFunction();
   private native String bar();
   (源码在最后)
4. 在项目目录下,新建一个文件夹jni,在里面新建一个ndkfoo.c文件和一个ndkbar.c文件
   其中com_ex_NdkFooActivity是包名加类名.这是JNI的命名规则.invokeNativeFunction是函数名
   //ndkfoo.c
   #include
   #include

   jstring Java_com_ex_NdkFooActivity_invokeNativeFunction(JNIEnv * env,jobject javaThis){
    return (*env)->NewStringUTF(env,"Hello from native code! -> ");
   }

   
   //ndkbar.c
   #include
   #include

   jstring Java_com_ex_NdkFooActivity_bar(JNIEnv * env,jobject javaThis){
    return (*env)->NewStringUTF(env,"bar");
   }

5. 新建一个Android.mk(也是在jni里)
   LOCAL_PATH := $(call my-dir)
   include $(CLEAR_VARS)

   LOCAL_MODULE    := ndkfoo
   LOCAL_SRC_FILES := ndkfoo.c ndkbar.c

   include $(BUILD_SHARED_LIBRARY)

   这里的my-dir,BUILD_SHARED_LIBRARY由ndk-build提供.

6. 编译两个.c文件生成.so文件
   进入NdkDemo的根目录(就是src,jni等所在的目录)
   /NdkDemo$ ndk-build
     Compile thumb  : ndkfoo <= /NdkDemo/jni/ndkfoo.c
     Compile thumb  : ndkfoo <= /NdkDemo/jni/ndkbar.c
     SharedLibrary  : libndkfoo.so
     Install        : libndkfoo.so => /NdkDemo/libs/armeabi
  
7. 运行模拟器里运行NdkDemo
   如图:
     

8. NdkFooActivity.java

package com.ex;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
 
public class NdkFooActivity extends Activity {
 
  // load the library - name matches jni/Android.mk
  static {
    System.loadLibrary("ndkfoo");
  }
 
  // declare the native code function - must match ndkfoo.c
  private native String invokeNativeFunction();
  private native String bar();
 
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // this is where we call the native code
        String hello = invokeNativeFunction();
        String bar = bar();
       
        new AlertDialog.Builder(this).setMessage(hello+" "+bar).show();
    }
}




补充: 在eclipse里使用ndk

前提:
 1. 会用Android SDK建立 Android application.
 2. 会安装和使用NDK.
 3. 在eclipse里安装了CDT插件(CDT - C/C++ Development Tools)
 
配置过程:
 1. 新建Android application.
 2. 在工程的根目录下建jni目录
 3. 在Project Explorer里右键,New->Convert to a c/c+ project.
    在对话框里把 Specify Project Type打上勾, 在左边的框里选Makefile project,
    在右边的框里选 --Other toolchain--, 然后Finish
 4. 设置工程属性,选C/C++ build->Environment.
    在对话框里Add: PATH -> ndk的路径,如:/software/android-ndk-r4b
    把Add to all configurations打上勾,然后OK.
    然后也确定Append variables to native environment打上勾.然后Apply.
 5. 在工程的根目录建Makefile文件:
    all:
            ndk-build  # (前面是tab,不是空格,这很重要)
    clean:
            ndk-build clean
           
 6. 在jni里建Android.mk文件, oh,yeah! 可以干活了。
阅读(948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~