c++ - 如何在android项目中使用NDK?

标签 c++ android c java-native-interface android-ndk

我需要在我的项目中使用一些原生的c/c++,所以我需要使用NDK。有没有一种简单的方法可以在 Eclipse 中进行设置?

谢谢。

最佳答案

有以下步骤

1 : 在你的项目目录下创建一个jni文件夹

2 : 在你新建的文件夹jni 中新建一个文件名Android.mk 并新建一个C 或C++ 的文件,让我们考虑听说我们使用C 文件文件名是 MyNativeC.c

3: 现在在 Android.mk 文件中输入以下代码

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS := -llog

LOCAL_MODULE    := local_module_ndk // this is the name of local module by which you can call the Local source file
LOCAL_SRC_FILES := MyNativeC.c// hear we can pass the name of your native file name hear we are use MyNativeC.c file so we pass the name of MyNativeC.c in local source file name

include $(BUILD_SHARED_LIBRA

4 现在打开 MyNativeC.c 文件并创建两个你想从你的 android 代码(从你的 Activity)调用的方法 听说我们创建了以下代码

    #include <jni.h>
#include <string.h>
#include <stdio.h>
#include <android/log.h>

#define DEBUG_TAG "MY_NDK_DEMO"


jstring Java_com_myNDKDemo_MainActivity_getString(JNIEnv * env, jobject this, jint value1, jint value2)
{
    char *szFormat = "Addition : %i";
    char *szResult;


    jlong sum = value1+value2;


    szResult = malloc(sizeof(szFormat) + 20);


    sprintf(szResult, szFormat, sum);

    jstring result = (*env)->NewStringUTF(env, szResult);


    free(szResult);

    return result;
}

5 现在编辑您要调用 native 代码的 Activity ,

首先创建一个静态 block ,我们必须在其中加载 native 代码库。

听说我们显示我的 Activity 名称的代码是 MainActivity.java

package com.myNDKDemo

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends Activity {
    private static final String DEBUG_TAG = "MainActivity";


    private native String getStringAdd(int fist, int second);

    static {
        System.loadLibrary("local_module_ndk");
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        button b = new Button(this);

        b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub


                            Toast.makeText(getApplicationContext(),""+getStringAdd(100,200), 2000).show();

        }
    });

           setContentView(b);

    }
}

6 现在首先编译c代码,要先编译c代码你必须NDK development kit ,

现在打开运行。然后输入cmd

现在转到项目路径

In my case I create application in Destop, so hear we give the path of my app

在那之后输入我的 NDK 的 ndk-build 文件路径

enter image description here

现在我们按下回车键,它会自动在您的项目中创建 libs 目录 enter image description here

7 如果您在项目中看到,自动创建了libs 和obj

8.刷新(右键单击)JNI 文件夹(每次使用 teh ndk-build 构建时刷新它,这实际上会在 libs 文件夹中加载新构建的共享库。)

9.现在运行你的android项目,当按下按钮时它会显示添加

谢谢

关于c++ - 如何在android项目中使用NDK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359720/

相关文章:

android - 将带有 Javascript 数组的对象附加到 QML ListModel 会导致 SEGFAULT

c套接字连接错误关闭套接字

java - 微调器选择到字符串

C++:覆盖缓存中的 std::string

c++ - 用作模板函数输入的函数的 void 返回值被视为参数

C++ 调用不同的类构造函数,避免切换

android - 签名保护级别 - 澄清

c - 在原始套接字上 Ping 数据包

java - 从Java学到C... ...最大的挑战是什么?

c++ - 将 HarddiskVolume 路径转换为普通路径