android studio使用jni

来源:互联网 发布:基数排序算法 编辑:程序博客网 时间:2024/05/01 18:24

如果你要使用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文件。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 体育生暑假训练太累怎么办 高强度运动后性功能不好怎么办 运动后第二天全身酸痛怎么办 运动后心慌想吐怎么办 激素停后全身疼怎么办 运动完头晕想吐怎么办 跑了步全身酸痛怎么办 运动后全身没力气怎么办 学完游泳不会换气怎么办 猫不吃饭精神不好怎么办 运动完头晕目眩想吐怎么办 酒后第二天恶心想吐怎么办 剧烈运动后肌肉酸痛怎么办 剧烈运动后吐了怎么办 长跑后头晕想吐怎么办 运动后一直想吐怎么办 跑多了恶心想吐怎么办 剧烈运动恶心想吐怎么办 长跑之后 恶心想吐怎么办 喝咖啡后绞心痛怎么办 牛奶喝多了胃胀怎么办 运动后大量出汗头晕怎么办 屁股出汗淹的特别痛怎么办 运动完感觉很累怎么办 跑步后感觉很累怎么办 输液多了伤脾胃怎么办 运动完后特别晕怎么办 运动过量大腿肌肉酸痛怎么办 13岁发烧38.2度怎么办 头晕恶心想吐四肢无力怎么办 烧退了浑身疼怎么办 下午睡久了头疼怎么办 一天睡久了头疼怎么办 在家躺久了头疼怎么办 4周多儿童睡眠差怎么办 6岁儿童睡眠差怎么办 四年级的孩子不会写作文怎么办 四年级的孩子写不出作文怎么办? 欠了三万网贷怎么办 打完篮球浑身疼怎么办 在部队当兵意外死亡了怎么办