ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Ndk开发入门教程

2021-06-12 12:59:59  阅读:204  来源: 互联网

标签:文件 Ndk 入门教程 mk 生成 开发 so jni JavaToC


配置AS的NDK环境

这里直接在as中下载安装。也可以自己去下载ndk然后配置。
在这里插入图片描述
把下载后的ndk路径配置到环境变量去(方便在terminal中直接使用):
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yNHrVRMT-1622963494903)(https://imgblog.csdnimg.cn/20210606151008806.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ2MTQwMzg=,size_16,color_FFFFFF,t_70)]
在这里插入图片描述

创建NDK的工程

  • 选择创建的类型
    ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210606150031627.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ2MTQwMzg=,size_16,color_FFFFFF,t_7
    创建完项目后自动生成的.cpp文件会报红,不处理也不会出错,解决方式查看该文

生成想要的so库

  • 创建测试JavaToC 文件
public class JavaToC {
    static{
        // ToCJniTest就是后面会生成的so库的名字
        System.loadLibrary("NdkDemo");
    }
    // 定义一个native方法,具体的实现放在C里面
    public native static String getTips();
}


  • build-makeproject 编译生生成class文件。存放位置如下:
    在这里插入图片描述

  • 在as的terminal下进入debug\classes位置,输入指令生成h文件
    在这里插入图片描述
    .c是源文件,而.h是头文件,一般把函数的声明都放在头文件中,而实现就都在.c文件当中。好比java中的接口类与实现类,.h类似接口类型,.c类似实现类。.cpp是c++文件

  • 在工程目录的app\src\main文件夹目录下新建一个jni文件夹

  • .h文件移动到新建的jni目录下面

  • 新建一个.c文件jni目录下 ,命名为JavaToC.c

#include <jni.h>
#include <com_bifan_ndkdemo_JavaToC.h>

JNIEXPORT jstring JNICALL Java_com_bifan_ndkdemo_JavaToC_getTips
        (JNIEnv *env, jclass jc){
    return (*env)->NewStringUTF(env,"ToCJniTest library test");
}


  • 新建Android.mk和Application.mk文件
    jni文件夹中创建两个文件Android.mk和Application.mk
    Android.mk 文件是用来配置 jni编译的 源文件输入、编译参数、编译输出产物 等等。 Application.mk 文件是用来 指定平台有关的配置信息,比如编译的平台版本、平台架构、使用的标准库 等等
    Android.mk编辑:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkDemo  //so库名字
LOCAL_SRC_FILES := JavaToC.c  //c文件名称
include $(BUILD_SHARED_LIBRARY)

Application.mk编辑:

APP_ABI := all  //指定so库的类型有哪些

最终包含的文件如下:

在这里插入图片描述

  • 生成so文件
    在Terminal下,定位到创建的jni目录下,输入ndk-build指令生成。然后会在libs下生成so文件。
    在这里插入图片描述
    在这里插入图片描述

使用so库

  • 在APP的build.gradle下添加
    sourceSets {
        main(){
            jniLibs.srcDirs = ["src/main/libs"]
            jni.srcDirs = []
        }
    }

  • 调用
 TextView tv = binding.sampleText;
        tv.setText(JavaToC.getTips());

转载注明:https://blog.csdn.net/u014614038/article/details/117626568

标签:文件,Ndk,入门教程,mk,生成,开发,so,jni,JavaToC
来源: https://blog.csdn.net/u014614038/article/details/117626568

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有