Android NDK开发(一)JNI初体验

本文详细介绍如何使用JNI(Java Native Interface)技术实现Java与C语言的交互,具体步骤包括配置NDK、创建Java本地方法、生成并实现C文件、配置Gradle及常见问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JNI(Java Native Interface) 中文名:Java本地接口,Android中与C交互的一种技术。

本文章是基于Android Studio ,所以Eclipse的小伙伴们 sorry啦,原理差不多。

一,配置NDK

这里写图片描述

创建一个Android项目
(1),创建一个类MyUtils .class

public class MyUtils {
    public native String getStringFromC();
}

(2),在Activity调用

public class MainActivity extends AppCompatActivity {

    TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setText();
    }

    private void initView() {
        text= (TextView) findViewById(R.id.tv);
    }

    private void setText() {
        MyUtils utils=new MyUtils();
        text.setText(utils.getStr());
    }

    static {
        System.loadLibrary("sincerly");   
    }
}

static静态代码会优先于构造函数执行,这里的作用是加载sincerly这个.so库。
写完这个代码 然后makeProject

找到Android Studio Terminal命令窗口,
执行–>>cd app\build\intermediates\classes\debug
执行–>>javah -jni com.aaa.MyUtils

main下边创建jni文件夹
然后把app\build\intermediates\classes\debug下边的com_xx_MyUtils.h剪切至jni文件夹下

这里写图片描述

找到自动生成的so库

这里写图片描述
把lib下边的三个全部复制到根目录的lib下边
Android.mk复制到jni目录下

然后再jni目录下创建c文件 我这里的名字叫hello.c

#include "com_tgl_intimate_util_NdkJniUtils.h"

JNIEXPORT jstring JNICALL Java_com_tgl_intimate_util_NdkJniUtils_getStr
  (JNIEnv *env, jobject obj){
     return (*env)->NewStringUTF(env,"Sincerly!");
  }

配置build.gradle
这里写图片描述

可以运行啦!

可能会遇到的问题

1,编译抛出异常
useDeprecatedNdk。。这类异常的话可以在gradle.properties添加

android.useDeprecatedNdk=true

2,页面空白
检查Activity的onCreate方法是否正确

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //选第一个
    @Override
    public void onCreate(Bundle savedInstanceState,
                PersistableBundle persistentState) {
        super.onCreate(savedInstanceState,persistentState);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值