Android 的嵌入式写法,调用C\C++文件

刚刚学了NDK与JNI,肯定是用来调用c\c++文件的,接下来,就给大家带来一种很简单的嵌入式调用C|C++文件的一种方法

新建一个工程
在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代码 !!!");
        }


在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)

在build.gradle中配置

externalNativeBuild {
            ndkBuild {
                path file("src\\main\\jni\\Android.mk")
            }
        }

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

.so文件的路径: app\build\intermediates\ndk-build

好了,到这你的so文件已经生成了,这种方法很简单,

接下来我们来调用c文件里的方法,简单的运行一下。

1、创建NdkJniUtils类


public class NdkJniUtils {
    public native int add(int a,int b);
}


同时加入:

static{
          //System.loadLibrary("库文件名称不带前缀,后缀名");
          System.loadLibrary("hello-jni");
        }
2、在MainActivity中调用 NdkJniUtils



package rise.lung.sow.dra.ndkjni_text;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    NdkJniUtils ndkJniUtils;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        ndkJniUtils = new NdkJniUtils();
        int add = ndkJniUtils.add(2, 6);
        tv.setText(add+"");
    }
}

好了,到这里就完成了,运行就可以显示出结果了。

谢谢~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值