自己写视频播放器(3) Android JNI 使用1

JNI有两种主要的实现方式:

  • 静态方式
  • 动态注册

  1. 静态方法实现步骤:

1.Java代码中添加库和native方法声明:

package com.example.testndk;


import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;


public class TestNDK extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        TextView  myTextView = new TextView(this);
        myTextView.setText(  stringTestNdk() );
        setContentView(myTextView);
    }
    //native方法
    public native String  stringTestNdk();
    //加载库,libtestNDK.so
    static {
        System.loadLibrary("testNDK");
    }
}

2.运行工程,生成.class文件

3.生成javah文件:

  1. Java 1.6
  • $ javah -classpath bin/classes -d jni com.example.testndk.TestNDK
  1. Java 1.7
  • eclipse:切换在工程的src目录下
  • android studio :切换在工程的app/src/main/java/目录下
    $ javah com.example.testndk.TestNDK
    //每个class都会产生一个对应的.h文件(所以一个Activity可能产生多个.h文件),每个*.h文件命名格式固定:包名_类名.h

4 实现头文件中声明的函数
新建文件jni/testNDK.c。testNDK.c的代码如下:

#include <string.h>
#include<jni.h> 
JNIEXPORT jstring JNICALL Java_com_example_testndk_TestNDK_stringTestNdk
  (JNIEnv* env, jobject obj)
{
    return (*env)->NewStringUTF(env, "Hello JNI!");
} 

testNDK.c的作用就是实现com_example_testndk_TestNDK.h中声明的函数。

5 编写实现函数对应的Android.mk
添加文件jni/Android.mk,内容如下:

LOCAL_PATH := $(call my-dir) 
include$(CLEAR_VARS) 
LOCAL_MODULE    := testNDK
LOCAL_SRC_FILES:= testNDK.c    
include$(BUILD_SHARED_LIBRARY)

6 编译生成库文件
进入到工程所在目录,执行ndk-build,编译生成.so库文件。
$ cd jni$ ndk-build
生成库文件所在目录:libs/armeabi/libtestNDK.so

7 运行工程
在eclipse下运行工程,ok。


  1. 动态方法实现步骤:

未完待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容