【问题标题】:Project containing jni file包含 jni 文件的项目
【发布时间】:2012-05-31 04:27:24
【问题描述】:

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

【问题讨论】:

  • 你必须从 cygwin 终端使用 ndk-build 命令编译 jni 文件夹。这会在 libs 文件夹中创建“.so”文件。
  • 我用的是mac book,不需要安装cygwin。
  • 你有链接指示我午餐要吃什么命令

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


【解决方案1】:

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

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

第二步:在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 文件夹。键入以下行并按 Enter。

javah -jni com.ndkadd.Addition

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

第 6 步:现在从命令提示符编译本机代码,如下所示。

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的地方有NDK,并且在android-ndk-r8文件夹中包含JNI的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多