ADT中使用JNI简介

开始之前先进行环境配置

1.下载NDK 

2.配置环境变量,在path中添加NDK的路径

本文以helloFromC方法为例

1. 在项目根目录下创建jni文件夹
2. 在jni文件中创建一个c文件
3. 在java代码中,创建一个本地方法helloFromC


public native String helloFromC();
4. 在jni中定义函数实现这个方法,函数名必须为 :包名+类名+方法名,对于无参的添加默认的两个参数,对于需要传人参数的,写上前连个默认的,直接添加传人的参数


jstring Java_com_excmple_helloworld1_MainActivity_helloFromC(JNIEnv* env, jobject obj)
5. 返回一个字符串,用c定义一个字符串


char* cstr = "hello from c";
6. 把c的字符串转换成java的字符串


jstring jstr = (*env)->NewStringUTF(env, cstr);
return jstr;
7. 在jni中创建Android.mk文件,与.c文件同级别

 LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)
	#编译生成的文件的类库叫什么名字
    LOCAL_MODULE    := hello
    #要编译的c文件
    LOCAL_SRC_FILES := Hello.c

    include $(BUILD_SHARED_LIBRARY)


8. 在c文件中添加<jni.h>头文件

9. 在jni文件夹下执行ndk-build.cmd指令,默认只生成arm的lib为了支持所有平台需要在jni文件夹中创建Application.mk

内容:APP_ABI := armeabi armeabi-v7a x86  

10. java代码中加载so类库,调用本地方法

static{
		//加载打包完毕的so类库
		System.loadLibrary("hello");
	}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
    }


    public void click(View v){
    	Toast.makeText(this, helloFromC(), 0).show();
    }
    
    //定义一个本地方法,方法体由c语言实现
    public native String helloFromC();
    

注:可以使用javah命令自动生成方法名,根据java版本不同,方式不同

*1.7:在src目录下执行javah 包名.类名
*1.6:在bin/classes目录下执行


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值