如何在Android Studio中使用JNI

为什么使用jni

JNI,java native interface(java本地接口),用于在java中调用本地语言,这里的本地语言一般为C/C++。
一般需要在java中使用C的原因有两个:1.java是基于jvm的,因此无法直接驱动硬件,所以当我们需要直接驱动硬件的时候就需要调用本地语言。
2.C代码的执行效率要远远高于java代码,当我们需要提高效率的时候就要用到jni,比如对于图像的处理等待。

怎样使用

这里主要介绍如何在Android Studio中使用jni

1.在java代码中声明本地方法,关键字native




2.配置NDK环境
Tools->Android->SDK Manager->Android SDK->SDK Tools->勾选LLDB和NDK点击OK进行安装







3.在Android Studio自带的命令行工具Terminal中
先通过cd命令进入到src->main->java目录下

然后通过命令javah -jni生成.h文件


如果没问题就会生成一个.h文件


这个文件唯一的作用就是帮助我们写C代码中的方法
打开这个文件,最重要的一句话就是
JNIEXPORT jstring JNICALL Java_com_zhuoxin_jnitest_MainActivity_getStrFromJNI
  (JNIEnv *, jobject);

这句话的作用稍后再说

4.在app目录下创建jni目录
在jni目录下创建C文件和Android.mk文件


首先打开demo.c
声明C代码中的函数
#include <jni.h>
jstring
Java_com_zhuoxin_jnitest_MainActivity_getStrFromJNI(JNIEnv *env,jobject thiz) {
return (*env)->NewStringUTF(env, "Hello From jni!!!");
}

其中红色部分就是刚刚生成的.h文件中直接粘贴过来并稍作修改的,至于哪里修改了请仔细看,h文件的作用就是帮助我们写本地方法的名称用的,用完就可以删了。

再打开Android.mk文件
其中代码如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)  #清除之前生成的东西
LOCAL_MODULE := demo
LOCAL_SRC_FILES := demo.c
include $(BUILD_SHARED_LIBRARY)

几个重要配置:

a.gradle.properties中加上一句话:
android.useDeprecatedNdk=true

b.local.properties中配置ndk路径


c.在app的gradle中的android节点下配置如下;
sourceSets{
    main{
        jniLibs.srcDirs = ['libs']
    }
}


这时候在Terminal中,进入app目录下,执行命令ndk-build



执行效果如上图

此时会生成libs和obj目录




5.在java中调用本地方法

public class MainActivity extends AppCompatActivity {
static {
    System.loadLibrary("demo");
}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //使用native关键字声明本地方法
    public native String getStrFromJNI();
    
    public void callCMethod(View view){
        String mStrFromJNI = getStrFromJNI();
        Toast.makeText(this,mStrFromJNI,Toast.LENGTH_SHORT).show();
    }
}

这段代码就是调用c中的方法,在界面上弹一个吐司。

效果:



大功告成!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android Studio进行JNI(Java Native Interface)开发,可以让我在Java代码调用C/C++代码,实现跨语言的功能。下面是在Android Studio进行JNI开发的一般步骤: 1. 创建一个新的Android项目或打开一个已有的项目。 2. 在项目的`app`模块下,创建一个名为`jni`的文件夹(如果没有的话)。 3. 在`jni`文件夹下,创建一个名为`native-lib.cpp`(或其他任意名称)的C/C++源文件,用于编写JNI代码。 4. 在`native-lib.cpp`文件,编写你需要的C/C++代码。这些代码将会被Java代码调用。 5. 在`app`模块的`build.gradle`文件,添加以下配置: ``` android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "" } } } ... externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 6. 在`app`模块下,创建一个名为`CMakeLists.txt`的文件,并添加以下内容: ``` cmake_minimum_required(VERSION 3.10.2) project("YourProjectName") add_library( native-lib SHARED native-lib.cpp ) find_library( log-lib log ) target_link_libraries( native-lib ${log-lib} ) ``` 7. 在Android Studio的底部工具栏,点击"Build Variants"按钮,将"Active Build Variant"设置为`native-lib`。 8. 在Android Studio的顶部菜单,点击"Build" -> "Make Project",编译项目。 9. 在Java代码,通过`System.loadLibrary("native-lib")`加载C/C++库,并调用其的函数。 这样,你就可以在Android Studio进行JNI开发了。记得在编写JNI代码时,遵循JNI的规范和语法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值