zoukankan      html  css  js  c++  java
  • 1、android Studio 使用jni 调用 C

    一、配置相关信息

    1、配置gradle.properties文件
    //在文件中添加
    android.useDeprecatedNdk=true
    

    2、配置项目当中的build.gradle
    (1)、在defaultConfig 中添加
    ndk{
        abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
    }
    (2)、在android 中添加
    externalNativeBuild {
        ndkBuild {
            path "src/main/jni/Android.mk"
        }
    }
    

    3、 创建Android.mk文件

    //在srcmainjni       这个路径要和上面配置ndkBuild 中的path想同
    //创建Android.mk文件 添加信息  可以查看Android.mk语法查看每句话是什么意思
    
    LOCAL_PATH := $(call my-dir)  
    
    include $(CLEAR_VARS)
    
    #LOCAL_ARM_MODE := $(_ARM_MODE)
    
    LOCAL_MODULE:= jniSmaple   //这个是so库名字  
    
    
    LOCAL_CFLAGS :=
    
    LOCAL_SRC_FILES:=  com_demo_jnitest_JniC.c
    
    
    LOCAL_LDLIBS += -llog
    
    #include $(BUILD_STATIC_LIBRARY)
    include $(BUILD_SHARED_LIBRARY)
    
    4、创建Java类
    //在java目录下创建一个新类
    package com.demo.jnitest;
    
    public class JniC {
        static {
            System.loadLibrary("jniSmaple");//加载so库  名字需要和android.mk文件中的 LOCAL_MODULE相同
        }
        //声明native方法
        public static native String getString(); 
    
        public static native void jni_test();
    }
    

    5、生成h文件
    (1)、可以手动创建,需要了解 在jni目录下方创建.c文件

    #include <jni.h>
    #include <android/log.h>
    
    int loglevel =ANDROID_LOG_DEBUG;
    
    JNIEXPORT jstring JNICALL
    Java_com_demo_jnitest_JniC_getString(JNIEnv *env, jclass jclass1){
        return (*env) -> NewStringUTF(env,"Hello jni");
    }
    
    JNIEXPORT void JNICALL
    Java_com_demo_jnitest_JniC_jni_1test(JNIEnv *env, jclass jclass1){
        __android_log_print(loglevel,"native_jni","test");
    }
    
    
    (2)、命令行生成代码
    命令行cd到当前工程目录下java文件夹
    输入命令   javah -jni 包名.类名
    按照上面的类  就是  javah -jni com.demo.jnitest.JniC
    输入之后会生成一个.h文件  把里面的方法复制出来 然后创建.c文件  复制到.c当中  
    

    阳光穿过叶的缝隙!
  • 相关阅读:
    Java面试题(转)
    哪种方式更适合在React中获取数据?
    vue学习之深入响应式原理
    还不会用FindBugs?你的代码质量很可能令人堪忧
    几道大数据面试题(转)
    【Medium翻译】Java抽象类有什么用?
    深入理解Kafka必知必会(上)
    (八十六)c#Winform自定义控件-表格优化(转载)
    IDEA 配置及常用快捷键
    Markdown 复杂公式&常用符号
  • 原文地址:https://www.cnblogs.com/Aaron-Han/p/13473985.html
Copyright © 2011-2022 走看看