代码改变世界

[原创]Android NDK开发之HelloWorld 附源码

2012-07-04 22:12  和尚释然  阅读(2282)  评论(2编辑  收藏  举报

一、新建Android Project.

打开我们的Eclipse新建一个Android Project,名为"NDK_Sample_HelloWorld".

SNAGHTML252e12[4]

选择Android Target为Android 2.3.3

SNAGHTML25f9d9

将Activity重命名为"AndroidNDKSample".

SNAGHTML62a18d[4]

 

添加"jni"相关目录及文件.

1. 添加jni文件夹

在我们新建的工程中新建一个名为"jni"文件夹.这个文件夹就是用来存放原生态"C/C++"的源码的地方.我们make的时候Cygwin就是编译这个文件夹.

2. 添加Android.mk文件

在"jni"文件夹里新建一个"Android.mk"文件.一个快捷并且保险的方法,就是从Android NDK自带的Samples中拷贝一个Android.mk文件到我们的工程中.

Android.mk的内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := nativie
LOCAL_SRC_FILES := myNative.c

include $(BUILD_SHARED_LIBRARY)

大家需要修改的地方就是上面蓝色粗体的代码.这里笔者简单介绍一下这几个配置选项的作用.

LOCAL_MODULE:  要生成的库名,即在java类应用时的名称.

LOCAL_SRC_FILES:   库对应的源文件,在jni文件夹下的C/C++的名称.

3. 添加C/C++文件

在"jni"文件夹里新建一个"myNative.c"文件,就是上面"Android.mk"文件中配置的C/C++文件.

myNative.c的内容如下:

#include <string.h>
#include <jni.h>

jstring Java_com_gel_ndk_AndroidNDKSample_stringFromJNI(JNIEnv* env, jobject thiz) {
    return (*env)->NewStringUTF(env, "Hello World of NDK !");
}

编译"jni"文件夹.

1. 运行Cygwin.

2. 通过cd命令到我们刚才创建的工程目录的"jni"文件夹下.然后输入$NDKROOT/ndk-build进行编译.编译成功会如下显示.

SNAGHTML4ca3be

3. 编译成功,按F5进行刷新.这时会多出"obj"和"libs"文件夹.

SNAGHTML512de4

 

编写Java代码.

1. Activity代码:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class AndroidNDKSample extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView NDKText = (TextView)findViewById(R.id.txtTitle);
        NDKText.setText(stringFromJNI());
    }
   
    public native String  stringFromJNI();
   
    static {
        System.loadLibrary("native");
    }
}

2. main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android%22
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/txtTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

 

运行程序.

运行成功的界面如下:

SNAGHTML64d9eb

源码下载:

http://download.csdn.net/detail/guenli/4411048

笔者也是Android NDK初学者,希望这篇文章能起到抛砖引玉.如果有什么疑问,也请留言.大家共同交流,共同进步.

如果有什么不对的地方欢迎指正.谢谢!