美文网首页程序员
Android studio Jni使用,安卓 java nat

Android studio Jni使用,安卓 java nat

作者: 雨邪 | 来源:发表于2021-08-05 15:02 被阅读0次

    1.下载ndk设置环境变量,并设置支持jni

    1.1 下载ndk 并设置环境变量
    mac环境如:

    export PATH=${PATH}:/Users/apple_mini/Library/Android/sdk/ndk/22.1.7171670
    

    1.2 打开gradle.properties,添加:

    android.useDeprecatedNdk=true
    

    1.3 打开local.properties,添加:

    ndk.dir=NDK的路径
    

    2.新建java访问c层的接口类

    package com.example.testapp;
    
    public class MyJni {
    
        static {
            System.loadLibrary("MyJni");
        }
    
        public native static String getString();
    
    }
    

    3.生成头文件

    3.1 "make-project"编译完成
    3.2 打开终端,运行

    //切换到对应目录(不同版本android studio 生成class文件目录不太一样 这里是4.2.1版本)
    cd app/build/intermediates/javac/debug/
    
    //执行生成头文件命令
    javah com.example.testapp.MyJni
    

    3.3 当前目录找到 com_example_testapp_MyJni.h文件

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_example_testapp_MyJni */
    
    #ifndef _Included_com_example_testapp_MyJni
    #define _Included_com_example_testapp_MyJni
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_example_testapp_MyJni
     * Method:    getString
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_example_testapp_MyJni_getString
      (JNIEnv *, jclass);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    
    

    4.app/src/main 目录下创建jni目录 并把com_example_testapp_MyJni.h 文件拷贝进来

    4.1创建MyJni.c文件,(主要把头文件引入)

    #include<jni.h>
    #include<stdio.h>
    //导入我们创建的头文件
    #include "com_example_testapp_MyJni.h"
    
    JNIEXPORT jstring JNICALL Java_com_example_testapp_MyJni_getString(JNIEnv *env, jclass){
      //返回一个字符串
      return (*env)->NewStringUTF(env,"This is my first NDK Application");
    }
    

    4.2 创建 Android.mk文件

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    #生成的模块名
    LOCAL_MODULE := MyJni
    #需要编译的c文件(可以是多个)
    LOCAL_SRC_FILES := MyJni.c
    
    include $(BUILD_SHARED_LIBRARY)
    

    4.3 创建 Application.mk 文件 指定需要编译so库的cpu架构

    APP_ABI := all
    

    5.开始编译so文件

    cd 到 app/src/main/jni 目录并执行 ndk-build命令即可在 app/src/main/libs目录 生成so文件

    cd app/src/main/jni
    
    //执行
    ndk-build
    
    

    6.使用so文件

    6.1 把对应cpu架构文件夹和及so文件,复制到 app/libs目录
    6.2 build.gradle文件 android-》defaultConfig 里面添加支持cpu架构如下:

    ndk {
                abiFilters 'armeabi-v7a','x86'
         }
    

    6.3 build.gradle文件 android层级 里面添加app/libs读取so文件 如下:

     sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }
        repositories {
            flatDir {
                dirs 'libs'
            }
        }
    

    7 调用本地方法即可

    //调用native本地方法
    System.out.println("jni_str:" + MyJni.getString());
    
    //输出结果
    2021-08-05 14:49:14.358 11709-11793/com.example.testapp I/System.out: jni_str:This is my first NDK Application
    
    

    相关文章

      网友评论

        本文标题:Android studio Jni使用,安卓 java nat

        本文链接:https://www.haomeiwen.com/subject/zevmvltx.html