博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android(java)学习笔记203:JNI之NDK开发步骤
阅读量:4841 次
发布时间:2019-06-11

本文共 1923 字,大约阅读时间需要 6 分钟。

1. NDK开发步骤(回忆一下HelloWorld案例):

(1)创建工程

(2)定义native方法

(3)创建jni文件夹

(4)创建c源文件放到jni文件夹

(5)拷贝jni.h头文件到jni目录下(jni.h头文件在ndk目录\platforms\android-14\arch-arm\usr\include)

(6)在c源文件中导入jni头文件

(7)在c源文件中按照jni协议规范生成对应的native方法

  返回类型   Java_packagename_className_methodName(JNIEnv* env, jobject  obj,……)

(8)叫C代码工程师写好C的实现代码

(9)在C源文件中调用

(10)创建Android.mk文件,放到jni目录下:

 

            LOCAL_PATH := $(call my-dir)

            include $(CLEAR_VARS)

            LOCAL_MODULE := .so文件名

            LOCAL_SRC_FILES := .c源文件名

            include $(BUILD_SHARED_LIBRARY)

(11)进入工程的根目录下,调用ndk-build命令,生成.os文件

(12)在java代码中,加载.os文件:

   static {

                System.loadLibrary(".so文件名");

   }

 

(13)调用native方法

(14)测试运行

 

总而言之,JNI开发流程可以概括为下面的步骤:

(1) 在java中声明native方法

(2)编译java源文件得到class文件,然后通过javah命令导出JNI头文件
(3)实现jni方法(java中native声明的方法),使用C、C++实现
(4)编译成so库并在java中调用

2.下面根据上面的步骤,利用一个加法案例(请大家按照上面步骤):

(1)工程结构如下:

 

(2)代码内容

MainActivity,如下:

1 package com.himi.add; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.Toast; 6  7  8 public class MainActivity extends Activity { 9     10     /**11      * 12      * @param a  第一个加数13      * @param b  第二个加数14      * @return   结果a+b15      */16     public native int add(int a, int b);17     static {18         System.loadLibrary("myadd");19     }20     @Override21     protected void onCreate(Bundle savedInstanceState) {22         super.onCreate(savedInstanceState);23         setContentView(R.layout.activity_main);24         Toast.makeText(this, "res of add(5,8):"+add(5,8), 0).show();25     }26 27     28 }

 

Android.mk,如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := myadd

LOCAL_SRC_FILES := add.c

include $(BUILD_SHARED_LIBRARY)

 

add.c,如下:

1 #include 
2 3 int add(int a, int b) { 4 return a+b; 5 } 6 7 8 jint Java_com_himi_add_MainActivity_add(JNIEnv* env, jobject obj, jint a, jint b) 9 {10 return add(a,b);11 }

还有就是导入的jni.h文件

libmyadd.so是利用NDK生成的linux库文件

 

(3)测试略

转载于:https://www.cnblogs.com/hebao0514/p/4812948.html

你可能感兴趣的文章
设计模式之 面向对象的养猪厂的故事,C#演示(一)
查看>>
分页及字母筛选
查看>>
Expressions are not allowed at the top level
查看>>
非程序员的GNU Emacs使用心得......Shell Mode 第13集 把我的 kill-ring 还给我
查看>>
15.C#回顾及匿名类型(八章8.1-8.5)
查看>>
应用间共享数据方法(一)---sharepreferce
查看>>
傅盛:如何快慢“炼”金山?(转)
查看>>
模拟——作业调度方案
查看>>
node——module.exports
查看>>
爬虫简单实现
查看>>
sql查询语句如何执行
查看>>
CentOS 安装 ceph 单机版
查看>>
导航条选项卡
查看>>
bootstrap table 复选框使用
查看>>
ng -v 不是内部或外部命令
查看>>
图片模糊化处理
查看>>
iOS10 App适配权限 Push Notifications 字体Frame 遇到的坑!!!!
查看>>
一语道破项目管理知识体系五大过程组
查看>>
Mac连接远程Linux管理文件(samba)
查看>>
WPF变换详解
查看>>