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();
        }
  • 相关阅读:
    wnmpa或lnmpa 服务器搭建和原理
    windows 桌面图标 隐藏 小盾牌标志
    C# 执行 CMD 终极稳定解决方案
    比较两个object是否相等
    Microsoft Store 加载失败
    ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
    Win10安装gcc、g++、make
    通过proxifier实现酸酸乳全局代理
    C# 字母转数字
    html中设置锚点定位的几种常见方法(#号定位)
  • 原文地址:https://www.cnblogs.com/ltolstar/p/5452848.html
Copyright © 2011-2022 走看看