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

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

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


文末更多福利!
解压后的目录结构如下图所示:

打开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 的说明可以参考资料:www.cnblogs.com/luxiaofeng5…

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

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

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

extern "C"{
    jstring 
    Java_com_shanhy_example_ndk01_MainActivity_getStringFromJNI(JNIEnv* env, jobject thiz)
    {
        //返回一个字符串给Java层
        return env->NewStringUTF("小单 的 JNI HellWorld 程序.");
    }
}
复制代码

完成了,然后运行。运行之前先编译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.ndk01;

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    := XS_NDK_01
    private static final String libSoName = "XS_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进阶学习中的小模块,下面链接有详细大纲,有需要学习的朋友可以私信我哦!

点击查看完整高清的Android高级课程大纲脑图查漏补缺腾讯T3Android高级技术脑图


转载于:https://juejin.im/post/5c9a1a865188251c8e4d94a9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值