最新消息:欢迎访问Android开发中文站!商务联系微信:loading_in

Android NDK编写一个HelloWorld

新手入门 loading 3047浏览 0评论

在上一篇博文中,我们搭建好了Android ndk 的开发环境,作为码农,我们是不是先来写一个HelloWorld来表示一下自己的到来。

(1)首先在你的工作空间建一个Android项目,这里我建立的为NDKHelloWorld。项目结构如图(1)

图(1)

(2)在MainActivity中声明你所需要的本地方法,MainActivity的代码如下所示:

package com.gc.ndkhelloworld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
/**
*
* @author Android将军
*
*/
public class MainActivity extends Activity {

     private TextView mTextView;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           mTextView=(TextView) findViewById(R.id.tv);
           mTextView.setText(helloWorld());
     }
     /**
       * 在Java代码中声明本地方法
       * @return
       */
     public native String helloWorld();
}

(2)选中该项目,右击选择Android Tools,然后选择Add Native Support…,如图(2)所示:

图(2)

然后出现图(3)所示情况:

图(3)

点击finish之后,会发现项目的目录结构如图(4)所示:

图(4)

下面我们开始实现本地方法,helloworld.cpp的代码如下:

#include
#include
/**
* @author Android将军
*/
/**
*
* 实现本地方法时,一个要按照函数命名规则来命名,函数的命名规则如下:
* Java_PackageName_ClassName_MethodName
* 从这个规则可以看出,任何由Java程序调用的NDK函数名都必须以Java开头,紧跟着要调用该函数的Java类
* 所在的包名(中间的“.”要改成“_”),然后会跟Java类名,最后是方法名,各部分直接都用“_”连接。
*/
extern "C"
{
       jstring Java_com_gc_ndkhelloworld_MainActivity_helloWorld(JNIEnv *env,jobject obj)
{
       return env->NewStringUTF("NDK,HelloWorld!");
}
}

实现完本地方法后,下面我们需要编译本地库,选中该项目,右击选择Build Project来进行编译本地库,编译完本地库之后,就需要加载本地库了。在静态初始化块内调用System.loadLibrary加载本地库,是加载库的最简单的方法,本例中加载库的代码如下所示:

static {
      System.loadLibrary("helloworld");
}

编译完本地库之后,你可以发现libs目录下多了一个armeabi目录,这是因为我们没有为该项目指定一个Application.mk文件,而Android NDK构建系统默认情况下为armeabi ABI生成二进制文件。为了我们的本地库可以在NDK所支持的所有架构上运行,我们在jni目录下需要增加一个Application.mk文件,文件内容如下:

APP_ABI := all

如果一切顺利的话,大家可以在模拟器或者真机上看到该案例的运行效果如下:

如果大家在实现本地方法时,遇到 could not be resolved或Unresolved inclusion: <jni.h>情况,请按下图解决:

该案例Demo下载地址:Demo上传csdn下载频道了,可是怎么也刷不出来地址,等有地址之后,再把该地址更新。

转载请注明出处:http://blog.csdn.net/android_jiangjun/article/details/44899927

转载请注明:Android开发中文站 » Android NDK编写一个HelloWorld

您必须 登录 才能发表评论!