转自:http://blog.csdn.net/fighter0593/article/details/16887099
参考了网上很多帖子,然后反复测试,一上午时间终于把NDK开发环境搞定了。能搞定至少参考了几十个贴,就不写转了吧
NDK开发环境搭建
2013-11-12
安装包: android-ndk-r9b-windows-x86.zip
官方网站下载地址:http://developer.android.com/tools/sdk/ndk/index.html#Downloads
安装方法:
(前提条件:已经安装配置好eclispe+SDK+ADT)
1、 解压android-ndk-r9b-windows-x86.zip到SDK文件夹
2、 设置NDK目录,Window->Preferences->Android->NDK,在NDK Location中设置好NDK路径,D:\Share\Android_SDK\android-ndk-r9b
阴影是我的SDK路径,注意不能有空格!!!
使用方法:(NDK之helloworld程序测试)
1、 新建一个安卓工程,起名为hellojni,注意不能使用下划线”_”,尽管使用下划线在JAVA开发中没有影响,但是在NDK中编写则会出现文件命名冲突,会造成命名歧异。
2、 选中hellojni工程,Project->Properties->Builders然后添加NDK编译器,NEW->Program 起名叫:NDK_Builder(随意),Location填写到D:\Share\Android_SDK\android-ndk-r9b\ndk-build.cmd,Working Directory填写${workspace_loc:/hellojni}(选择自己的工程)选择到需要编译的目录
3、 添加C++语法支持,Project->Properties->C/C++General->Paths and Symbols 在这里添加,点Add… 根据建立工程的SDK的API等级选择版本,我选择D:\Share\Android_SDK\android-ndk-r9b\platforms\android-17\arch-arm\usr\include,同时在Add to all languages 选项卡上打勾
4、 添加jni代码,在hellojni工程名上点右键,选择Android Tools->Add Native Support… 设置库名称为:hellojni(不用写.so,会自动补齐!)
5、 修改动态库源文件,在工程目录下会自动生成lib文件夹,其中有两个文件:hellojni.cpp和Android.mk
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellojni
LOCAL_SRC_FILES := hellojni.cpp
include $(BUILD_SHARED_LIBRARY)
如果想使用本地编译好的库,则添加LOCAL_LIB
Hellojni.cpp
#include <jni.h>
#include <string.h>
extern "C"{//由于是C命名规则,所以必须使用extern”C”
jstring
Java_com_example_hellojni_MainActivity_stringFromJNI( JNIEnv* env,
jobjectthiz )
{
returnenv->NewStringUTF("helloworld!");
}
}
其中Java_com_example_hellojni_MainActivity_stringFromJNI,的命名规则是固定的:
JAVA_(包名)_(Activity名)_(方法名),所以在包中不要使用下划线,否则有歧异!!!
return env->NewStringUTF("helloworld!");是C++的返回方法。
6、 修改界面配置文件activity_main_xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
7、 修改MainActivity.java
packagecom.example.hellojni;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.Menu;
importandroid.widget.TextView;
publicclass MainActivity extends Activity {
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextViewtv=(TextView)findViewById(R.id.text);
tv.setText(stringFromJNI());
}
publicnative String stringFromJNI();
static {
System.loadLibrary("hellojni");
}
}
8、 Project->clean
9、 Project->Build ALL
10、 运行工程,结果如下: