android studio使用jni

本文介绍如何在Android Studio中使用JNI技术,通过配置NDK环境变量、创建C文件并编写简单的示例代码来实现从Java调用C函数。文章还介绍了如何处理不同CPU架构的兼容性问题。

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

如果你要使用jni的话首先下载一个ndk,然后配置一下环境变量。

在android studio中点击file->project structure中配置

然后在app->src->main中创建一个jni文件夹。

在jni文件中创建一个c文件,.c为后缀。

#include<stdio.h>
#include<stdlib.h>
#include<jni.h>

jstring Java_com_jiang_shuaijie_test_HelloActivity_helloFromC(JNIEnv* env,jobject thiz){
    char* arr="hello c";
    jstring jstr=(*(*env)).NewStringUTF(env, arr);
    return jstr;
}
这是最基本的代码,返回一个字符串。jstring是ndk中定义好的一个字符串基本类型。

JNIEnv* env,jobject thiz
方法的参数是固定。你可以参考ndk文件夹下sample文件夹,里面有很多的事例。
Java_com_jiang_shuaijie_test_HelloActivity_helloFromC
这个是你java类中方法所在的位置。比如:

package com.jiang.shuaijie.test;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class HelloActivity extends AppCompatActivity {
    static {
        System.loadLibrary("hello");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello);

    }

    public void onClick(View view) {
        Toast.makeText(this, helloFromC(), Toast.LENGTH_SHORT).show();
    }

    public native String helloFromC();
}
这是我在java中创建的一个activity类。helloFromC()方法为本地c调用的方法,要在类型名前加上native定义。里面的static静态初始化把编译好的libhello.so文件加载进来。

文件创建好之后,你还需要在jni文件中创建一个Android.mk配置文件。

LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)
    LOCAL_MODULE    := hello
    LOCAL_SRC_FILES := Hello.c

    include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE 这个是你起的类库的名字
LOCAL_SRC_FILES 这个是类库的源文件

编写好之后再jni文件夹中使用命令ndk-build.cmd编译,编译成功就可以运行了。

如果你要调用带参数的方法,只需在

jstring Java_com_jiang_shuaijie_test_HelloActivity_helloFromC(JNIEnv* env,jobject thiz)
括号内继续加参数。比如:(JNIEnv* env,jobject thiz,jint a,jint b)

由于cpu平台架构的不同,有x86,arm的当你使用jni时会自动编译成arm的so文件,在x86下不能使用。所以为了兼容,ndk6.0以上的可以在jni下创建一个Application.mk配置文件,内容为:

APP_ABI := armeabi armeabi-v7a x86

然后在jni目录下重新编译会编译成三个目录,如上的三个目录。这样你就可以在两个平台上使用了。

你可以直接编译运行,不需要单独编译c文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值