Eclipse创建NDK的步骤

1 创建项目

依次选择路径 File-> New -> Other -> Android -> Android Application Project

选择路径

点击"Next",填写基本的项目信息

配置项目基础信息

若是其它数据不需要修改的,一直Next到底,最后点击Finish,此时项目创建成功!

项目结构

2 运行项目

右击项目,选择Run As -> Android Application,此时我的项目这里报错

Failed to load C:\tgcity\android-sdk-windows\build-tools\26.0.0\lib\dx.jar

Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!

我的解决办法是在project.properties中添加

sdk.buildtools=25.0.2

此时项目就可以跑起来了

3 生成.h文件

首先在MainActivity中创建公开方法

public static native String getStringFromJNI();

其次在项目的第一层创建“jni”文件夹

最后执行语句

javah -classpath bin/classes -d jni com.example.testjnidemo.MainActivity

此时该步骤报错->无法访问android.app.Activity

具体原因可以参考javah生成报错

最终输入的指令为

javah -classpath bin/classes;C:\tgcity\android-sdk-windows\platforms\android-26\android.jar -d jni com.example.testjnidemo.MainActivity

刷新项目即可出现生成的.h文件

生成的h文件

4 配置jni中文件

先看一下jni结构

jni结构

首先是.c文件

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <jni.h>

JNIEXPORT jstring JNICALL Java_com_example_testjnidemo_MainActivity_getStringFromJNI (JNIEnv * env, jclass jclass){

return (*env)->NewStringUTF(env,"message back succeed");

}

接着是Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := tgcity #生成的so文件名称

LOCAL_SRC_FILES := tgcity.c #编译的文件名称

include $(BUILD_SHARED_LIBRARY)

最后是Application.mk文件

APP_ABI := all

使用指令进行生成so文件

ndk-build

ndk调用指令

刷新项目即可看到生成的so文件

so生成目录

5 使用

导入so文件

static{    

    System.loadLibrary("tgcity");

}

...

Log.e(getLocalClassName(), getStringFromJNI());

查看输出结果


输出log
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、NDK产生的背景 Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于J...
    Ten_Minutes阅读 3,542评论 1 27
  • 一、NDK 什么是NDK? 在Android OS上开发应用程序,Google提供了两种开发包:SDK和NDK。 ...
    psw123456阅读 1,013评论 0 0
  • From:https://www.cnblogs.com/Jeson2016/p/6434425.html htt...
    Tim_Hu阅读 1,044评论 0 0
  • JNI,是Java Native Interface的缩写,中文为Java本地调用。通俗地说,JNI是一种技术,通...
    HVCKER阅读 801评论 1 1
  • 前段时间由于做比赛的事,一直都没时间写博客,现在终于可以补上一篇了,一直想学习一点NDK开发的知识,但是迟迟没有动...
    冰鉴IT阅读 1,799评论 7 18