包含jni文件的项目

时间:2012-05-31 04:27:24

标签: android android-ndk java-native-interface

我正在尝试将一个android项目导入我的Eclipse。 当我运行这个项目时,我收到一个错误,“库为空”。 我发现这个项目不同,它包含一个名为“jni”的文件。我的库在那个文件中。 我想这个文件中的库从未编译过(我不知道为什么) 我在某些话题中看到我需要使用NDK? 有没有人对此有明确的答案?

1 个答案:

答案 0 :(得分:1)

请参阅以下链接。 link to download ndk sample 1 sample 2

Step1:首先创建一个项目,然后在项目目录中创建一个名为jni的文件夹

Step2:在jni文件夹中创建addition.c文件并添加以下行。

#include "com_ndkadd_Addition.h"

JNIEXPORT jint JNICALL Java_com_ndkadd_Addition_messageFromNativeCode

(JNIEnv * env, jobject jObj,jint value1, jint value2)
{

return (value1 + value2);

}

Step3:在jni文件夹中创建Android.mk文件,以下代码

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := Addition
LOCAL_SRC_FILES := addition.c

include $(BUILD_SHARED_LIBRARY)

Step4:从命令提示符导航到项目的bin文件夹。键入以下行并按Enter键。

javah -jni com.ndkadd.Addition

第5步:将创建的 com_ndkadd_Addition.h 文件移至jni文件夹。

Step6:现在从命令提示符下编译本机代码。

location_of_ndk\project_name> location_of_ndk\ndk-build

步骤7:下方您的活动的代码和您在libs文件夹中创建的.so文件的使用情况。

public class Addition extends Activity {
    TextView txtHello;

    static
    {
    System.loadLibrary("Addition");
    }
    public native int messageFromNativeCode(int v1,int v2);
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView txtHello = new TextView(this);
        txtHello.setText(""+messageFromNativeCode(5,5));        
        setContentView(txtHello);        
    }
}

注意:: 最好在你拥有SDK的地方和在android-ndk-r8文件夹中包含JNI的项目中使用NDK。