第一个NDK工程--hello ndk

来源:互联网 发布:电商美工培训 编辑:程序博客网 时间:2024/06/07 00:31

第一步,要创建一个Android工程。这一步就不用多说了。我的工程创建完的目录如下图:



第二步,写java文件MainActivity.java 和布局文件activity_main.xml

activity_main.xml内容如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical">        <TextView         android:id="@+id/show_tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:text=""/>    </LinearLayout>

MainActivity.java的内容如下:

package com.dfe.hellondk;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {TextView tv = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                tv = (TextView)this.findViewById(R.id.show_tv);                tv.setText( strFromJNI() );            }        /*     *声明本地方法,这个 方法已经被打包进本应用的本地库'jni_hello'实现     **/    public native String strFromJNI();        /*     * 在程序启动时加载jni_hello库。这个库在应用安装时被package manager 解压到 /data/data/com.dfe.hellondk/lib/libjni_hello.so     */    static{    System.loadLibrary("hello_ndk");    }}

到这里java部分就算完成了。


第三步,编写相应的C/C++代码。

(1)生成头文件

首先在你的工程目录下新建一个jni文件夹。如下图


然后在windows下打开dos窗口,开始 --> 输入cmd并按回车键。进入ndk目录,不知dos命令的可自行网上搜索。使用dos命令进入工程目录。在使用javah生成头文件之前,确保你的jdk安装并配置环境变量没有问题。然后使用使用命令:

javah -classpath src -d jni com.dfe.hellondk.MainActivity

如下图:


命令简单说一下:

javah :命令名称

-classpath src :指定包含要操作的类的文件夹名,比如我需要操作的类是MainActivity,而包含这个类的包在src目录下。

-d jni :指定生成的头文件保存的目录。

com.dfe.hellondk.MainActivity :要操作的类

如果没有什么问题,头文件应该已经生成了,我的头文件文件名是  com_dfe_hellondk_MainActivity.h  头文件内容如下:


/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_dfe_hellondk_MainActivity */#ifndef _Included_com_dfe_hellondk_MainActivity#define _Included_com_dfe_hellondk_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class:     com_dfe_hellondk_MainActivity * Method:    strFromJNI * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_dfe_hellondk_MainActivity_strFromJNI  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif

这里说一点,函数 Java_com_dfe_hellondk_MainActivity_strFromJNI    对应于MainActivity中的strFromJNI方法。其名称虽然很长,但是有规则的,这个规则按照 java_pacakege_class_mathod,即是 java_包名_类名_方法名。

(2)编写相应的C文件

C文件主要是实现头文件中的函数。在jni目录下新建hello_ndk.c  ,文件名可以随意,最好见名知意其内容如下:

#include <string.h>#include <jni.h>jstring Java_com_dfe_hellondk_MainActivity_strFromJNI (JNIEnv* env, jobject thiz){return (*env)->NewStringUTF(env, "Hello , Ndk !");}

(3)编写Android.mk

Android.mk主要是定义编译规则,和Linux下makefile类似。在jni目录下新建Android.mk文件,其内容如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#c源文件的名字,不包含后缀LOCAL_MODULE    := hello_ndk#c源文件的名字LOCAL_SRC_FILES := hello_ndk.cinclude $(BUILD_SHARED_LIBRARY)

第四步,编译。

文件已经全部写好了,下面就是要进行编译了。

我们再看一下先在的工程目录:


工程下多了一个jni目录,jni含有我们刚刚编写的三个文件。

再工程目录中,右键点击工程名 --> Android tools --> Add Native Support  来添加ndk支持,会出现如下界面:


点击finish按钮。

然后点击工具栏中的锤子图标进行编译,如下图:

有可能会出现错误:Method 'NewStringUTF' could not be resolved 

解决办法,看我另一个博客:http://blog.csdn.net/dingfengen/article/details/51604710

如果问题解决再次编译会出现如下图:



然后就是下载到手机测试,结果如下:



这样第一个ndk程序就ok了。


这里参考了:

http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html

非常感谢。




0 0