博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NDK 环境搭建 之 起始篇NDK HelloWorld
阅读量:7197 次
发布时间:2019-06-29

本文共 2888 字,大约阅读时间需要 9 分钟。

ADT插件:管理Android SDK和相关的开发工具的

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

到Android官网下载最新的NDK,注:NDK版本在r7以上之后就集成了Cygwin,而且还是十分精简版。比起下载Cygwin要方便多啦(Cygwin以前需要单独安装和配置,现在已被集成)!

下载链接见:
下载完成之后,解压搞定。

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

打开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 的说明可以参考资料:)

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

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

#include 
#include
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高级课程大纲脑图查漏补缺

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

你可能感兴趣的文章
Net设计模式实例之外观模式(Façade Pattern)(2)
查看>>
corosync+pacemaker高可用集群
查看>>
完美找回windows7快速启动栏
查看>>
使用freemarker生成静态页面
查看>>
cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
查看>>
linux正则表达有话说
查看>>
八个最佳Python IDE
查看>>
Varnish简单笔记
查看>>
2014美国IT行业薪资水平
查看>>
Tcp多线程服务器和客户端程序
查看>>
racle Study之---Oracle IN和NOT IN的使用
查看>>
Error: Cannot find a valid baseurl for repo: base
查看>>
Volley的基本使用
查看>>
Thinkpad T410 Win7下接USB设备反应慢
查看>>
openStack使用宿主机监控
查看>>
Java游戏引擎libgdx的简介
查看>>
在实践中深入理解ARP协议
查看>>
[工具]Mac下非常好用的快捷终端Dterm
查看>>
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(10月29日-11月4日)
查看>>
我的开源项目:一种TLV编解码器的实现
查看>>