zoukankan      html  css  js  c++  java
  • jni学习总结

    第一步:定义一个c方法的接口 相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的

    public native String helloFromC();

    第二步:实现C代码

    1、在dos命令下进入到工程中src文件夹所在的目录下,我的工程在E盘中的object->android->AliWangWang->src

    2、使用javah命令,在javah后写上c方法接口所在类的全类名,按enter回车编译

    3、编译过后,刷新工程可以看到工程中多了一个文件

    4、在工程中新建文件夹jni,并将刚才生成的.h文件放到jni文件夹下

    5、实现C语言代码,打开刚才生成的.h文件,可以看到为我们编译好的方法,这个方法也可以自己写,但是为了方便和正确通过上述方法实现

    JNIEXPORT jint JNICALL Java_com_ivan_aliwangwang_MainActivity_login
      (JNIEnv *, jobject, jstring);

    6、将.h文件中的方法拷贝到hello.c下开始编写c代码

    #include <stdio.h>
    #include "com_example_helloworldformc_MainActivity.h";  // 引入ndk环境里面的头文件 需要用<> 引用代码中的头文件 ""
    
    //public native String helloWorldFromC(){}
    jstring Java_com_example_helloworldformc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj){// 返回一个java String 类型的字符串
        //jstring     (*NewStringUTF)(JNIEnv*, const char*);
        //(*env) 相当于 JNINativeInterface* JNIEnv
        //*(*env)  相当于 JNINativeInterface
        ///return (**env).NewStringUTF(env,"helloworldfromc");
    
        return  (*env)->NewStringUTF(env,"helloworldfromc");
    
    
        
    }

    第三步:在jni目录下创建Android.mk文件

     LOCAL_PATH := $(call my-dir)
    
       include $(CLEAR_VARS)
        #对应打包成函数库的名字
       LOCAL_MODULE    := libhello  
       #对应的C代码的文件
       LOCAL_SRC_FILES := Hello.c
    
       include $(BUILD_SHARED_LIBRARY)

    第四步: 把c代码 打包成函数库

    1、在dos命令中,进入到工程所在的目录,如上述所示

     2、输入nkd-build,前提是已经做好了环境变量的配置,如图所示表示编译成功

    3、在eclipse中刷新工程目录可以看到

    第五步:在java代码中引入库函数

        //在java代码中引入函数库
        static{
            System.loadLibrary("hello");//注意  去掉前面的lib和后面的.so即可
        }
        

    第六步:在android中调用该方法即可,这里是在按钮的点击事件中直接调用了该方法,并弹出一句话

        public void click(View view){
            // 将方法引入到函数库中后就可以直接调用这个方法
            Toast.makeText(getApplicationContext(), hellofromc(), 0).show();
        }
  • 相关阅读:
    年轻人的第一个 Spring Boot 应用,太爽了!
    面试问我 Java 逃逸分析,瞬间被秒杀了。。
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    坑爹的 Java 可变参数,把我整得够惨。。
    6月来了,Java还是第一!
    Eclipse 最常用的 10 组快捷键,个个牛逼!
    Spring Cloud Eureka 自我保护机制实战分析
    今天是 Java 诞生日,Java 24 岁了!
    厉害了,Dubbo 正式毕业!
    Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
  • 原文地址:https://www.cnblogs.com/ltolstar/p/5452848.html
Copyright © 2011-2022 走看看