首页 > 移动平台 > 详细

Android NDK 环境搭建 之 起始篇NDK HelloWorld

时间:2015-11-19 13:15:47      阅读:312      评论:0      收藏:0      [点我收藏+]

ADT插件:管理Android SDK和相关的开发工具的
NDK插件:用于开发Android NDK的插件,ADT版本在20以上,就能安装NDK插件,另外NDK集成了CDT插件(所以本文直接针对ADT 20以上版本进行说明)

到Android官网下载最新的NDK,注:NDK版本在r7以上之后就集成了Cygwin,而且还是十分精简版。比起下载Cygwin要方便多啦(Cygwin以前需要单独安装和配置,现在已被集成)!
下载链接见:http://developer.android.com/tools/sdk/ndk/index.html
下载完成之后,解压搞定。

解压后的目录结构如下图所示:
技术分享

打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径,例如我的是:D:\Android\android-ndk_r10-windows
技术分享

新建一个Android工程,在工程上右键点击Android Tools->Add Native Support… ,然后给我们的.so文件取个名字,例如我的是:XS_NDK_01
技术分享

这时候工程就会多一个jni的文件夹,jni下有Android.mk和XS_NDK_01.cpp文件。Android.mk是NDK工程的Makefile,XS_NDK_01.cpp就是NDK的源文件。
(关于 Android.mk 的说明可以参考资料:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/13/2137577.html

先说明一下:JNI接口的命名规范是:Java_ + 调用该方法的包名(包名的点用代替) + + 调用该接口的类名 + _ + 方法名,对于实例方法,有两个参数是必要的,一个JNI的环境指针JNIEnv

接下来编辑XS_NDK_01.cpp文件,写一个HelloWorld的demo,代码如下:

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

jstring
Java_com_duicky_MainActivity_getStringFromJNI( JNIEnv* env,jobject thiz )
{
    //返回一个字符串给Java层
    return (*env)->NewStringUTF(env, "HelloWorld from JNI !!");
}

完成了,然后运行。运行之前先编译NDK,然后在编译JAVA代码。编译也许会遇到Unable to launch cygpath. Is Cygwin on the path?如何解决?
Eclipse -> Window -> Preperences -> C/C++ -> Build -> Environment 添加一个环境变量NDKROOT,如下图:
技术分享

再工程右键,点Properties->C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd,如下图:
技术分享

然后创建一个Activity调用我们刚刚编写的HelloWorld,代码如下:

package com.shanhy.example.ndk_01;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * HelloWorld NDK 开发
 *
 * @author SHANHY(365384722@QQ.COM)
 * @date   2015年11月19日
 */
public class MainActivity extends Activity {

    //也就是你mk配置文件中的  LOCAL_MODULE    := SHANHY_NDK_01
    private static final String libSoName = "SHANHY_NDK_01";

    private Context mContext = null;
    private Button btnClick = null;
    private String mStrMSG = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mContext = this;
        btnClick = (Button) findViewById(R.id.btn_click);
        btnClick.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                //调用 JNI 层实现的方法
                mStrMSG = getStringFromJNI();
                if(mStrMSG == null) {
                    mStrMSG = "调用JNI失败";
                } 
                LogUtils.toastMessage(mContext, mStrMSG);
            }
        });

    }

    /**
     * 声明本地方法
     * 
     * 该方法为native方法.由C实现
     * 
     * @return  JNI 给出的信息
     */
    public native String  getStringFromJNI();

    /**
     * 载入JNI生成的so库文件
     */
    static {
//        System.loadLibrary(libSoName);
    }

}

至此,我们就完成了一个简单的例子,如需更进一步对NDK进行开发,请查阅相关资料。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android NDK 环境搭建 之 起始篇NDK HelloWorld

原文:http://blog.csdn.net/catoop/article/details/49926233

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!