关闭

Android 创建第一个jni文件

标签: androidjavac语言jni
178人阅读 评论(0) 收藏 举报
分类:

1、在项目文件里创建jni文件夹
2、在jni里创建c文件
3、在java代码里,创建一个本地方法helloFromC

public class JniActivity extends Activity {

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

    public void start(View view){

    }

    public native String helloFromC();
}

4、在c文件里创建函数jstring com_android_imooc_jni_JniActivity_helloFromC
1)com_android_imooc_jni包名称
2)JniActivity类名称
3)helloFromC方法名称

5、返回Java字符串

#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
jstring com_android_imooc_jni_JniActivity_helloFromC(JNIEnv* env, jobject obj){
    char* content = "hello world";
    //jstring jstr = (*env)->NewStringUTF(env,content);
    //转换成java字符串
    jstring jstr = (*env)->NewStringUTF(env,content);
    return jstr;
}

6、配置ndk环境变量,并在jni目录下创建Android.mk文件

LOCAL_PATH := $(call my-dir)
   include $(CLEAR_VARS)
#编译生成的文件的类库叫什么名字
   LOCAL_MODULE    := hello
   #要编译的c文件
   LOCAL_SRC_FILES := Hello.c

 include $(BUILD_SHARED_LIBRARY)

7、进入到jni目录,打开命令窗口
运行:ndk-build.cmd回车就能编译了

8、编译完成后在libs目录下会生成一个.so文件

9、加载类库,就能调用c语言写的代码了

    static{
        //加载类库
        System.loadLibrary("hello");
    }

10、如果出现错误,可能是系统不兼容的,有些cpu是arm架构,有些是x86等,那我们要怎么解决呢?
在jni文件夹里添加Application.mk文件内容如:

APP_ABI := armeabi armeabi-v7a x86
或
APP_ABI := all

11、如果函数名很长,很怪,那如何编写jni文件呢?不要紧,可以使用javah搞定,
首先进入到这个项目的src文件夹下
javah com.android.imooc.jni.JniActivity

12、配置NDK的路径
这里写图片描述

13、配置完,就可以使用工具生成本地的类库了
这里写图片描述

输入imooc,此时jni目录下自动生成,里面有两个文件
这里写图片描述

强调说明:用这种办法添加的jni目录就不能删除了,小心!!!

14、如何去除.c文件里的黄线
这里写图片描述

0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:416528次
    • 积分:8352
    • 等级:
    • 排名:第2457名
    • 原创:467篇
    • 转载:24篇
    • 译文:0篇
    • 评论:67条
    最新评论