转自:http://blog.csdn.net/geolo/article/details/5953941 第一个例子没转
第一步:首先我们在eclipse中新建一个工程,就叫做AndroidNDKSample1吧。 第一个Activity类名为AndroidNDKSample
第二步:在我们新的工程中加一个名为:jni 的文件夹。这个文件夹就是放原生态c/c++的源码的地方,我们make的时候cygwin就是编译这个 文件夹的。
第三步:在jni文件夹里新建一个Android.mk文件。注意,后缀为.mk 。
Android.mk的内容为:
LOCAL_PATH := $(call my-dir) <--------- 默认的,不需要更改
#清除一些变量
include $(CLEAR_VARS) <-------- 默认的,不需要更改
#要生成的库名
LOCAL_MODULE := native <--------在java类引用时的名称
#库对应的源文件
LOCAL_SRC_FILES := myNative.c <------在jni文件夹下的 c/c++ 的名称
#生成共享库
include $(BUILD_SHARED_LIBRARY) <-- 默认的,不需要更改
第四步:在jni文件夹里新建一个myNative.c的文件。这个文件就是c/c++文件。
myNative.c 的内容为:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<jni.h> int getIntCount() { int x,y; x = 500; y = 600; x+=y; return x; } jint Java_com_geolo_android_AndroidNDKSample_getIntCountFromJNI(JNIEnv *env, jobject thiz){ return getIntCount(); }
第五步: 编译jni文件夹里的原文件。 运行cygwin,不断cd或cd .. 到你工程目录的jni文件夹下。
例如我的:/cygdrive/e/androidNDKspace/AndroidNDKSample1/jni
之后运行命令 $NDKROOT/ndk-build
编译成功会是如此
Administrator@PC-201009201844 /cygdrive/e/androidNDKspace/AndroidNDKSample1/jni $ $NDKROOT/ndk-build Compile thumb : native <= /cygdrive/e/androidNDKspace/AndroidNDKSample1/jni/myN ative.c SharedLibrary : libnative.so Install : libnative.so => /cygdrive/e/androidNDKspace/AndroidNDKSample1/l ibs/armeabi
第六步:刷新eclipse工程。这时候会多出obj和libs文件夹。
第七步:写你的java文件。(这一步提倡在第四步之前写)内容为:
package com.geolo.android; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class AndroidNDKSample extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView NDKText = (TextView)findViewById(R.id.text); NDKText.setText("getIntCount: " + getIntCountFromJNI()); } static{ System.loadLibrary("native"); } public native int getIntCountFromJNI(); }
main.xml为:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
好吧,运行你的程序了。。。。
如果有什么疑问: 请和我联系:QQ303314679 Email:[email protected]