• 在AndroidStudio2.3.2下JNI开发的详细步骤(转)


    转自:http://blog.csdn.net/luhaoying1111/article/details/72468867

    安装NDK

    在工具栏点击File->Settings->Appearance & Behavior->System Settings->Android SDK->SDK Tools选中LLDB和NDK,点击确认,软件会自动安装NDK。
    
    • 1
    • 2

    这里写图片描述

    默认安装路径: 你的sdk路径 dk-bundle文件夹

    这里写图片描述

    新建一个工程

    在main文件夹下新建一个目录jni

    在jni目录下新建一个文件 hello-jni.c

    在hello-jni.c 中编写c代码

            #include <jni.h>
            //jstring: 返回值类型 String
            //规则: Java_包名_类名_方法名(jvm虚拟机的指针,调用者对象)
            jstring Java_com_lhy_jnidemo01_MainActivity_helloFromC(JNIEnv* env,jobject thiz){
                return (*env)->NewStringUTF(env, "你好,我来自C代码 !!!");
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这里写图片描述

    在jni目录下新建Android.mk文件

    添加如下内容:

            #指定编译的文件夹  指定当前文件目录
            LOCAL_PATH := $(call my-dir)
            #编译器会定义很多的临时变量,中间变量,最好清空所有的中间变量。
            include $(CLEAR_VARS)
            #编译出来模块的名称
            LOCAL_MODULE    := hello-jni
            # 编译的源代码的名称
            LOCAL_SRC_FILES := hello-jni.c
            #编译一个动态库,静态库
            #静态库 文件名.a   包含所有的函数并且函数运行的依赖,体积大,包含所有的API
            #动态库 文件名.so  包含函数,不包含函数运行的依赖,体积小,运行的时候,去操作系统寻找需要的API
            include $(BUILD_SHARED_LIBRARY)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这里写图片描述

    在build.gradle中配置

            externalNativeBuild {
                ndkBuild {
                    path file("src\main\jni\Android.mk")
                }
            }
    • 1
    • 2
    • 3
    • 4
    • 5

    这里写图片描述

    点击 Make Project(或Ctrl+F9) 即可生成.so文件

    .so文件的路径: appuildintermediates dk-build

    在MainActivity里面:

    1,需要把动态链接库加载到jvm虚拟机,添加以下代码:

            static{
              //System.loadLibrary("库文件名称不带前缀,后缀名");
              System.loadLibrary("hello-jni");
            }
    • 1
    • 2
    • 3
    • 4

    2,声明native的方法:

     public native String helloFromC();
    • 1

    3,像调用一般java代码一样调用native的方法.

     String str = helloFromC();
    • 1

    这里写图片描述

    [demo源码下载]

    版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    P3384 【模板】树链剖分
    AW136 邻值查找 (【模板】set)
    android布局自适应
    android HttpClient接口实现网络通信
    android加载html,以及js通讯
    mktime 和strtotime获取今日、昨日、上周、本月的起始时间戳和结束时间戳,
    mysql查询今天,昨天,近7天,近30天,本月,上一月数据方法
    瀑布流(masonry和infinitescroll)、(grid-a-licious)
    使用 JavaScript 修改浏览器 URL 地址栏
    测试UTF8编码的文件是不是加了BOM
  • 原文地址:https://www.cnblogs.com/weizhxa/p/7774276.html
Copyright © 2020-2023  润新知