Android jni编程简单编程


一,安装好环境

1   首先要安装好ndk (用来编译文件生成相应的类库)

2    eclipse安装cdt用来方便在eclipse中写c/c++的代码

3     安装Cygwin Terminal用于方便地使用ndk

二,写代码

1,在eclipse中创建好Android项目,在项目中创建jni文件夹

2,定义一个c方法的接口   相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的,比如在mainActivity中写如下代码

public native String getHolleWorldFromC();

3,打开cmd或者cydwin软件,切换到项目的src目录中,用命令javah生成xxx.h的文件

javah com.xyc.xxx

4,将生成的文件拷贝到项目的jni文件夹下面

5,在jni文件夹中创建hello.c的文件,实现上面定义的函数

文件内容:

<span style="font-size:24px;">#include <stdio.h></span>
<span style="font-size:24px;">// 引入ndk环境里面的头文件 需要用<> 引用代码中的头文件 ""
#include "xin_yu_jni_MainActivity.h"
jstring Java_xin_yu_jni_MainActivity_getHolleWorldFromC(JNIEnv* env,jobject jobj){</span>
<span style="font-size:24px;">// 2 步 实现C代码
<span style="white-space:pre">		</span>// 返回一个java String 类型的字符串
<span style="white-space:pre">	</span>//jstring     (*NewStringUTF)(JNIEnv*, const char*);
<span style="white-space:pre">	</span>//(*env) 相当于 JNINativeInterface* JNIEnv
<span style="white-space:pre">	</span>//*(*env)  相当于 JNINativeInterface
<span style="white-space:pre">	</span>///return (**env).NewStringUTF(env,"helloworldfromc");
	return (*env)->NewStringUTF(env,"helloworldfromc");
}</span>

6,创建andrond.mk   告诉编译器 如何把c代码打包成函数库

文件内容:

   LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)
	# 对应打包成函数库的名字
   LOCAL_MODULE    := hello
   # 对应c代码的文件
   LOCAL_SRC_FILES := Hello.c

   include $(BUILD_SHARED_LIBRARY)

编译代码

这步用到了安装好的环境了

1,配置好环境变量,将ndk目录路径配置到path中,方便在Windows的cmd中编译代码

D:\androidTools\android-ndk-r8c

2,在Cygwin安装目录下\etc\profile中配置好ndk目录,用:号结束

PATH="/usr/local/bin:/usr/bin:/cygdrive/d/androidTools/android-ndk-r8c:${PATH}"

3,在cmd或Cygwin中使用命令ndk-build生成类库,如果生成成功在项目的目录中会多出一个obj文件夹来,里面放着已经成功生成的类库。


运行代码

1,在定义好方法的类中加载刚刚生成的类库

//在java代码中 引入库函数 
	static{
		System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so
		
	}
2,运行项目,如何在模拟器中运行可能会报

 java.lang.UnsatisfiedLinkError: Couldn't load RSSupport: findLibrary returned null
这个据说是模拟器的bug

在真机中亲测通过。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值