Eclipse android ndk 开发

Eclipse Android NDK 开发

下载NDK

由于Google被屏蔽,android官网也被屏蔽了,推荐去这个地址去下载,关于android开发的内容全都有

android ndk 下载地址

下载完之后配置NDK环境,详细就不说了,以上网址也有相关步骤,也可以问度娘和股沟

在eclipse中新建工程

这里写图片描述

创建成功后

建立用于jni映射的java文件

HelloUtils.java


package com.example.jnitest;

public class HelloUtils {
    static{
        System.loadLibrary("hello");
    }
    public native static String toastHello();

    public native static void logHello();

}

MainActivity.java

package com.example.jnitest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

    private Button btnf;
    private Button btns;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initView(){
        btnf=(Button) findViewById(R.id.btn_first);
        btns=(Button) findViewById(R.id.btn_second);

        btnf.setOnClickListener(this);
        btns.setOnClickListener(this);

    }
    private void initData(){

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_first:
            toastHello();
            break;
        case R.id.btn_second:
            logHello();
            break;

        default:
            break;
        }

    }

    private void toastHello(){
        Toast.makeText(this, HelloUtils.toastHello(), Toast.LENGTH_SHORT).show();
    }
    private void logHello(){
        HelloUtils.logHello();
    }

}

布局文件 activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button 
        android:id="@+id/btn_first"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="say hello world"/>
    <Button 
        android:id="@+id/btn_second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="log hello world"/>


</LinearLayout>

创建完毕后,编译一下项目,生成了class文件

生成相关的头文件

打开cmd 进入到项目的classes文件夹下
这里写图片描述

使用javah工具生成头文件

javah com.example.jnitest.HelloUtils

这里写图片描述

生成了相关的头文件

新建jni文件夹用来存放ndk开发相关代码

将上一步产生的com_example_jnitest_HelloUtils.h文件移动到jni文件夹下

为了方便将其重命名为HelloUtils.h


/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_jnitest_HelloUtils */

#ifndef _Included_com_example_jnitest_HelloUtils
#define _Included_com_example_jnitest_HelloUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_jnitest_HelloUtils
 * Method:    toastHello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_jnitest_HelloUtils_toastHello
  (JNIEnv *, jclass);

/*
 * Class:     com_example_jnitest_HelloUtils
 * Method:    logHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_example_jnitest_HelloUtils_logHello
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

将其copy一份重命名为HelloUtils.cpp文件放在jni文件夹下
并修改如下:


/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include "android/log.h"
#include "HelloUtils.h"
#define LOG_TAG "HelloUtils"
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_jnidemo_HelloUtils
 * Method:    toastHello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_jnidemo_HelloUtils_toastHello
  (JNIEnv *env, jclass){
    char* tmpstr = "hello world";
        return env->NewStringUTF(tmpstr);
};

/*
 * Class:     com_example_jnidemo_HelloUtils
 * Method:    logHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_example_jnidemo_HelloUtils_logHello
  (JNIEnv *, jclass){
    LOGD("hello world!");
};

#ifdef __cplusplus
}
#endif

创建Android.mk文件和Application.mk文件

相关文件的意义和变量的意义,书写方式,可以去Android官网NDK开发部分查看

具体文件如下:

Android.mk


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=hello
LOCAL_LDLIBS:=-llog
LOCAL_SRC_FILES := HelloUtils.cpp

include $(BUILD_SHARED_LIBRARY)

Application.mk


APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM :=android-14

对项目添加C++支持

右键项目—-》》new—-》》other

这里写图片描述

完成之后

修改编译配置

这里写图片描述

配置完成后,运行项目OK

如果打开代码出现代码审查问题,参考本人以前的文章
Android OpenCV NDK 配置问题

猜你喜欢

转载自blog.csdn.net/u013108408/article/details/52292482