android - 包含 jni 文件的项目

标签 android android-ndk java-native-interface

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

最佳答案

请引用以下链接。 link to download ndk sample 1 sample 2

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

第 2 步: 在 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);

}

第三步:在jni文件夹下创建Android.mk文件和下面的代码

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := Addition
LOCAL_SRC_FILES := addition.c

include $(BUILD_SHARED_LIBRARY)

第 4 步: 从命令提示符导航到项目的 bin 文件夹。输入以下行并按回车键。

javah -jni com.ndkadd.Addition

Step5:将创建的com_ndkadd_Addition.h文件移动到jni文件夹。

第 6 步:现在从命令提示符下编译 native 代码。

location_of_ndk\project_name> location_of_ndk\ndk-build

第 7 步:在您的 libs 文件夹中创建的 .so 文件的 Activity 和使用代码下方。

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);        
    }
}

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

关于android - 包含 jni 文件的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827448/

相关文章:

android - Android中LinkedIn的Oauth 2.0授权

java - 运行 Android 应用程序两次才能工作,为什么?

android - 从联系人中检索 IP 地址

java - 在没有第 3 方库的情况下在 Java 中使用 C# DLL

android - Android 库模块的使用者必须添加类路径依赖项

android - 最终启动顺序出错 无法执行 MI 命令 -gdb-set target-async off

c++ - Opencv 过滤器导致图像上出现黑色衬里

android - ICS 上的 DeleteGlobalRef 崩溃

java - 使用 JNI 通过 std::ostream 从 C++ 获取文本数据到 Java

java - 如何通过 JNI 的函数调用接收 double 组?