Android 创建第一个jni文件

原创 2016年06月01日 22:56:11

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文件里的黄线
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android Studio创建JNI项目(一)

最近博主在研究JNI,在Android Studio中开发JNI中遇到一些坑,记录下来,希望给需要的人提供一些解决方法. JNI(Java Native Interface) Java本地接口.其实就...
  • qq_16558621
  • qq_16558621
  • 2016年08月18日 20:25
  • 2487

Eclipse配置jni头文件生成工具

在我一篇博文中提到了如何命令行生成jni的头文件 命令行生成android jni头文件方法,这种方法不是很便利,下面我来介绍一种简便的方法 1、’打开eclipse的菜单工具栏 2、点击下拉菜单...
  • jingzailongxin
  • jingzailongxin
  • 2016年09月02日 10:26
  • 185

AndroidJNI实践(2)--无需头文件的常规办法-JNI动态注册

Android与JNI实践(2)--无需头文件的常规办法-JNI动态注册 一、环境和工具:   Ubuntu14.04   java version "1.7.0_95"   IDE(Androi...
  • qq_33890819
  • qq_33890819
  • 2016年03月31日 17:11
  • 403

Android中JNI创建实例

参考文档: http://blog.sina.com.cn/s/blog_a11f64590101924l.html http://www.cnblogs.com/hoys/archive/2010/...
  • wikiday
  • wikiday
  • 2015年01月04日 22:18
  • 9059

Android NDK之----- 在jni中创建java类对象

如果想要在jni函数创建java类对象则要引用java 类的构造器方法,通过调用NewObject函数来实现。  NewObject函数的调用方式为:  jobject obj_new = (*e...
  • gg137608987
  • gg137608987
  • 2012年05月16日 17:16
  • 3794

android JNI C代码对sdcard中文件的操作

- 所有操作除路径不同其它全部相同,如:fopen, fclose, fread ... - 别忘记把权限加上,如下:         - 路径:mnt/sdcard/  ...
  • ouyangtianhan
  • ouyangtianhan
  • 2015年08月05日 09:42
  • 2214

Android JNI的Android.mk文件语法详解

Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息。 Android.mk将是GNU Makefile的一部分,且将被Build Syst...
  • zhangcanyan
  • zhangcanyan
  • 2016年07月17日 16:02
  • 2736

Android Studio 2.0下创建jni应用调用本地C函数

开发环境 jdk1.8.0_77 sdk 25.1.1 ndk android-ndk-r11c-windows-x86_64 Android Studio 2.0 参考:Step by Step -...
  • Tommy996633
  • Tommy996633
  • 2016年04月11日 23:11
  • 6969

Android Studio 配置快捷方式生成JNI头文件的方法

Android Studio快捷键生成JNI头文件
  • venusic
  • venusic
  • 2016年04月07日 17:54
  • 4097

【JNI】拒绝各种坑!Android Studio 下创建JNI项目

一时间来,又是几个月的时间没有写文章了,你干啥去了=。=,忙着各种事情,让我这几个月感触最深的,就是JNI了,JNI真是个有趣的东西,废话少说,咱们一起来看看,怎么用JNI来写一些有用的东西,因为网上...
  • u011539882
  • u011539882
  • 2016年05月17日 17:30
  • 4840
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 创建第一个jni文件
举报原因:
原因补充:

(最多只允许输入30个字)