/** 转载必须标明出处*/

说白了就是c代码做成动态库,被java代码调用(JNI)。用C写不出可以直接在Android上跑的可执行程序来。

NDK开发需要一个交叉编译环境,需要安装Cygwin, NDK。

这些准备工作就不说了网上很多,当然也可以问我。

讲一下.so文件的生成

--------------------------------------------------------------------------------------------------------------------------------------------------

编译Android.so文件

1.定义native接口

创建一个Android的项目 “ndk_plus”,添加一个JNI类。


图1:Android的SDK项目

// JNI.java Code:

                            package kun.ndk.plus;public class JNI {    public native int plus(int a, int b);}            

2.根据JNI.java文件生成相应的.h文件

cmd到ndk_plus项目的bin目录,然后执行 javah –classpath . –jni kun.ndk.plus.JNI

这样就会生成kun_ndk_plus_JNI.h头文件。内容如下:

代码
                                    /* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class kun_ndk_plus_JNI */ #ifndef _Included_kun_ndk_plus_JNI#define _Included_kun_ndk_plus_JNI#ifdef __cplusplusextern "C" {#endif/* * Class:     kun_ndk_plus_JNI * Method:    plus * Signature: (II)I */JNIEXPORT jint JNICALL Java_kun_ndk_plus_JNI_plus  (JNIEnv *, jobject, jint, jint); #ifdef __cplusplus}#endif#endif                
复制代码

如果提示没有javah命令,则需要找到javah.exe所在目录(C:\ProgramFiles\Java\jdk1.5.0\bin),并把这个目录添加到环境变量 PATH里。

3.根据.h文件实现相应的.c文件

在Eclipse(其它编辑工具均可)里创建kun_ndk_plus_JNI.c文件

//-------------------------------------------------------------------------------------------------------------

#include<jni.h>

#include"kun_ndk_plus_JNI.h"

JNIEXPORT jintJNICALL Java_kun_ndk_plus_JNI_plus

(JNIEnv *e, jobject j, jint a,jint b)

{

return a + b;

}

//-------------------------------------------------------------------------------------------------------------

注意红色部分。由于生成的.h中的函数声明并没有形参,实现时需要自己添加形参变量。

还要注意的是要在蓝色的大括号后面添加一个回车(gcc 编译器的特点)。

4.制作.mk文件

在NDK目录下的apps目录下新建plus文件夹,在这个文件夹下创建一个txt文件,

输入一下内容:

APP_PROJECT_PATH:= $(call my-dir)

APP_MODULES :=plus

并重命名为Application.mk

在NDK/sources/samples目录下新建plus文件夹, 在这个文件夹下创建一个txt文件,输入以下内容:

LOCAL_PATH :=$(call my-dir)

include$(CLEAR_VARS)

LOCAL_MODULE :=plus

LOCAL_SRC_FILES:= kun_ndk_plus_JNI.c

include$(BUILD_SHARED_LIBRARY)

并重名名为Android.mk。把.c和.h文件拷贝到这个文件夹下。

//关键字具体含义看doc/ OVERVIEW.TXT

5.编译

启动Cygwin, cd到NDK目录

make APP=plus


成功后会在apps/plus/libs/armeabi下有一个libplus.so文件。

6. 后面就是把.so文件加到Android工程中在java代码中使用了。


更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android读写XML(下)——创建XML文档
  4. 《Android/OPhone 开发完全讲义》已出版,现提供源代码下载
  5. Android应用开发学习笔记之播放音频
  6. 如何让android apk 获得系统权限
  7. Android中图像变换Matrix的原理、代码验证和应用(一)
  8. Android(安卓)JNI学习笔记1(Android(安卓)Studio)
  9. Android之Manifest文件

随机推荐

  1. 表单事件、键盘事件、get
  2. 07-14作业 JSON 对象转换字符串 选项卡
  3. 匿名函数、箭头函数、立即执行函数和字面
  4. 进入bootstrap的大门之表格
  5. bootstrap常用组件样式使用之,导航,列表,按
  6. 常用字符串数组方法
  7. 缅甸将赌场合法化,成为全东南亚赌场最多的
  8. 访问器属性、闭包概念以及常用的DOM选择
  9. 变量、常量、数据类型
  10. bootstrap的入门学习