新版本NDK环境结构(避Cygwin,超快)

曾经做Android的项目要用到NDK就必需要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量...

麻烦到不想说了,Shamoo在网上查了一下资料,发现了一个超级快配置NDK的办法。

Step1:到Android官网下载Android的开发工具ADT(Android Development Tool的缩写),该工具集成了最新的ADT和NDK插件以及Eclipse,另一个最新版本号SDK。解压之后就能够用了,很爽!

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

NDK插件:用于开发Android NDK的插件。ADT版本号在20以上。就能安装NDK插件,另外NDK集成了CDT插件

也能够在线更新ADT、NDK插件。只是速度超级慢...所以果断在网上下载集成开发工具ADT。下载链接见:http://developer.android.com/sdk/index.html

Step2:到Android官网下载最新的NDK,注:NDK版本号在r7以上之后就集成了Cygwin,并且还是十分精简版。比起下载Cygwin要方便多啦。下载链接见:http://developer.android.com/tools/sdk/ndk/index.html

下载完毕之后。解压搞定!

Step3:打开Eclipse,点Window->Preferences->Android->NDK,设置NDK路径。比如Shamoo的是E:\android-ndk-r9c

Step4:新建一个Androidproject,在project上右键点击Android Tools->Add Native Support...,然后给我们的.so文件取个名字,比如:my-ndk

这时候project就会多一个jni的目录。jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDKproject的Makefile。my-ndk.cpp就是NDK的源文件。

Step5:接下来仿着NDK的demo,Hello-JNIproject写一下。使用Alt + ‘/‘能够代码提示!非常爽!有木有?之前用CDT时候死活都按不出代码提示。郁闷...

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

my-ndk.cpp:

?


1

2

3

4

5

6

#include
<jni.h>

JNIEXPORT
jstring JNICALL Java_com_shamoo_activity_TestActivity_stringFromJNI(JNIEnv *env,

        jobject
thiz) {

    returnenv->NewStringUTF("Hello
jni"
);

}</jni.h>

TestActivity.java:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

publicclassTestActivity
extendsActivity
{

    static{

        System.loadLibrary("my-ndk");

    }

    

    //
声明JNI层的原生方法,使用nativekeyword

    publicnativeString
stringFromJNI();

    

    @Override

    protectedvoidonCreate(Bundle
savedInstanceState) {

        super.onCreate(savedInstanceState);

        TextView
tvText =
newTextView(this);

        tvText.setText(stringFromJNI());

        setContentView(tvText);

    }

}

使用ndk库必须在static代码块里面用System.loadLaibrary载入.so库

Step6:完毕了,然后执行。

执行之前先编译NDK,然后在编译JAVA代码。编译或许会遇到Unable to launch cygpath. Is Cygwin on the path?错误,解决的方法例如以下:

1.project右键。点Properties->C/C++ Build的Building Settings中去掉Use default build command。然后输入${NDKROOT}/ndk-build.cmd

2.在C/C++ Build中点击Environment,点Add...加入环境变量NDKROOT,值为NDK的根文件夹

3.再编译。问题就解决啦!

执行时崩溃,遇到java.lang.UnsatisfiedLinkError: stringFromJNI错误,解决的方法:在C++文件里函数定义前加入extern "C"修饰

?


1

2

3

4

5

6

7

8

9

extern"C"{

JNIEXPORT
jstring JNICALL Java_com_shamoo_activity_TestActivity_stringFromJNI(JNIEnv *env,

        jobject
thiz);

}

JNIEXPORT
jstring JNICALL Java_com_shamoo_activity_TestActivity_stringFromJNI(JNIEnv *env,

        jobject
thiz) {

    returnenv->NewStringUTF("Hello
jni"
);

}

原因是:使用extern "C"修饰,编译器会按C语言的方式编译和连接。在C语言中。函数编译之后函数名与C++函数编译之后不同,比如foo(int x, int y),C可能会编译成_foo的名字,而C++由于支持重载。所以会编译成像_foo_int_int这样的带參数的函数名。假设是依照C语言的编译方式,调用foo函数是找不到_foo的函数名就会报出函数名找不到的错误。所以要加入extern
"C"修饰。

扩展:http://blog.csdn.net/houshunwei/article/details/17217695

Type ‘JNIEnv‘ could not be resolved
等信息解决的方法
        http://www.cnblogs.com/hlppsite/p/3349377.html

时间: 2024-10-12 19:47:06

新版本NDK环境结构(避Cygwin,超快)的相关文章

Cocos2d-x 3.0final 终结者系列教程15-win7+vs2012+adt+ndk环境搭建(无Cygwin)

终于不用Cygwin 了,很高兴 为什么要用Win7? 因为VS2012要求Win7以上系统才能安装! 为什么要用vs2012? 因为VS2012才支持C++11! 为什么要支持C++11? 因为Cocos2d-x 3.0final版需要C++11的支持. ----------------------------------------------------------- 准备软件都有哪些? Win7,VS2012,Java SDK , ADT(包含了Eclipse,sdk), Android

Android NDK环境快3程序出售搭建,需要cygwin

前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设备.接口.驱动控制的应用开发,不得不使用到快3程序出售QQ2952777280[] hxforum.com 本文的NDK开发环境(基于Android源码或内核源码修改),开发语言使用C/C++,NDK开发更接近于Linux开发,需要更多关于Linux应用编程知识.本文就介绍一下NDK环境搭建及基础编

NDK环境搭建

自习可怕的电磁场与电磁波刚回来,太tm难了,哎,还是进入今天的主题总结一下今天刚搭建好的NDK环境吧,废话不多说了,begin: Android开发中有时候涉及到调用C或者C++代码这时候就需要用到NDK(native development kit)工具了,NDK的搭建有好几种方法,在win7下常用的是利用Cygwin,NDK两个软件:不过现在新版本的adt-bundle-windows64(内部集成了adt等插件)可以直接在里面搭建NDK,但是本人觉得esclipse比较容易出错,特别是在更

Android NDK环境搭建与简单实例

一.NDK与JNI简介 NDK全称为native development kit本地语言(C&C++)开发包.而对应的是经常接触的Android-SDK,(software development kit)软件开发包(只支持java语言开发). 简单来说利用NDK,可以开发纯C&C++的代码,然后编译成库,让利用Android-SDK开发的Java程序调用.NDK开发的可以称之为底层开发或者jni(java  native interface)层开发,SDK开发可以称为上层开发. Andr

Windows XP环境下 搭建Android NDK环境

搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygwin:http://www.cygwin.com/  (1.7.11-1)③ notepad++:http://notepad-plus-plus.org/download/v5.9.8.html 2 cygwin安装 ① 执行下载的setup.exe.点Next② 选择安装方式.选择在线安装.假设

Android之——NDK环境搭建

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47404453 1.为eclipse增加c和c++的开发插件 Help中的install new software 选择 Helios-http://download.eclipse.org/release/helios 等待展开,选择Programinglanguage 选择c/c++ 开发工具 一路next下去. 同意licenses 安装成功会提示是不是确认重启eclipse

Android NDK环境搭建

在Android上要想开发出高效率的软件,还是需要用到C/C++语言,要想在Java上开发C/C++语言就需要在IDE上安装NDK:在Android的官网上SDK开发环境已经包含了ADT插件,最新的Android开发IDE可以到官网下载:http://developer.android.com/sdk/index.html 由于最近Android官网和google在国内经常进不去,我就把下载的放到网盘,有需要的可以去下载:http://pan.baidu.com/s/1hq3iBGw 准备的文件

windows下android NDK 环境配置

0.下载jdk并配置环境变量 下载最新jdk,百度搜索“jdk”就有了.安装完成后,配置环境变量(网上一搜,一堆,我这里仅作简要叙述)  计算机→属性→高级系统设置→高级→环境变量. 系统变量→新建 JAVA_HOME 变量 .变量值填写jdk的安装目录(本人是 D:\Program Files\Java\jdk1.7.0_45) 系统变量→新建 CLASSPATH 变量 变量值填写   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)

在Eclipse中搭建cocos2d-x的Android开发环境(免cygwin)

在突击几天学习Android开发之后,我开始转向cocos2d-x的Android开发了.由于自己以前有了解过cocos2d-x的开发,当时自己也学过不少游戏引擎,觉得cocos2d-x作为一个游戏引擎实在是比较简陋,没想到cocos2d-x现在红得发紫,这是我远远没有想到的.于是也赶赶潮流的末班车,查资料顺利地在Eclipse上搭建cocos2d-x的Androd开发环境. 原创文章,反对未声明的引用.原博客地址:http://blog.csdn.net/gamesdev/article/de