JNI提高----Java和Android Studio实例

目录

  • 一、概述
  • 二、实例
  • 三、总结

一、概述

这里主要通过一系列实例,理解和提高jni编程。最后能够轻松移植各种音视频解码器、ffmpeg、opencv到android studio工程中去。以前一直有做过和看过android系统的jni相关调用,这次是一个总结和提高。

二、实例

1、java上的实例

class Hello {
    
    static{    
        System.loadLibrary("hello");
    }

    public static void main(String[] args) {
        
        Hello hello = new Hello();
        hello.printHello();
    }    
    
    
    public native void printHello();
    
    
}

javac Hello.java,生成Hello.class。用javah -jni Hello,生成Hello.h.

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Hello */

#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Hello
 * Method:    printHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Hello_printHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif

新建Hello.cpp。通过gcc -fPIC -shared -I/usr/lib/jvm/java-7-openjdk-amd64/include Hello.cpp -o libhello.so,生成动态共享库。

#include <stdio.h>
#include "Hello.h"
#ifdef __cplusplus
extern "C" {
#endif



/*
 * Class:     Hello
  * Method:    printHello
   * Signature: ()V
    */
JNIEXPORT void JNICALL Java_Hello_printHello(JNIEnv *, jobject) {
    
    printf("hello world.\n");    
    
}

#ifdef __cplusplus
}
#endif


执行java Hello,出现

LD_LIBRARY_PATH=.  ;export LD_LIBRARY_PATH或java -Djava.library.path=. Hello

2、android studio上的实例

在MainActivity中添加native接口,然后调用。然后在jni中添加对应的函数接口,调用。通过cout或print是在logcat看不到打印的,需要调用__android_log_print函数。

实现结果:

三、总结

.............

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值