zoukankan      html  css  js  c++  java
  • Android之jni入门

    jni即java native interface,使用jni我们可以在JAVA中调用C代码,提高了效率,可以复用代码,可以灵活的应用于各种场景

    怎么使用JNI

    安装软件

    1.NDK 用于将C代码编译成so库

    2.CygWin 在windows下模拟linux环境

    3.CDT 在eclipse下编写C与C++环境搭建

    JNI实现

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

        public native String helloWorldFromC();

    2 步 实现C代码

    注意:方法名 严格按照jni的规范 jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj)
    其中Java是大写的,函数名必须包括正确的包名,笔者就因为在这里出了错,导致找不到库文件

    #include <stdio.h>
    #include <jni.h>
    
    //public native String helloWorldFromC();
    jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv*env,jobject obj)
    {
        //返回一个java String类型的字符串
        // jstring     (*NewStringUTF)(JNIEnv*, const char*);
        //return (**env).NewStringUTF(env,"hello wrold From C");
    
        return (*env)->NewStringUTF(env,"hellowroldFromC");
    
        //把C代码打包成函数库
    
    
    }

    3 生成android.mk 告诉编译器 如何把c代码打包成函数库

    如果没有mk文件,就使用ndk-build就会报错

    这里写图片描述

    android.mk文件格式如下

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

    4步 把c代码 打包成函数库 用到了安装的环境

    这里写图片描述

    生成了libhello.so库文件,就可以使用了

    5 步在java代码中 引入库函数

        static{
            System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so
    
        }

    6 使用方法

    public void click(View view)
        {
            //弹出一个吐司,吐司内容为C代码内容
            Toast.makeText(getApplicationContext(), helloWorldFromC(), 0).show();
        }

    运行效果

    这里写图片描述

  • 相关阅读:
    .NET性能调优之三:YSlow相关规则的调优工具和方法
    .NET性能调优之二:使用Visual Studio进行代码度量
    OSPF的常见前7类LSA详解
    Packet Tracer 5.3搭建DNS服务器
    中型网络中网络冗余设计的要领
    GNS3模拟器如何保存配置文件
    CCNA相当综合的实验1
    GNS模拟器中支持的模块说明
    典型配置:H3C基于AP限制接入客户端数量
    破解H3C交换机密码的方法
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223736.html
Copyright © 2011-2022 走看看