美文网首页初探移动多媒体
自己写视频播放器(3) Android JNI 使用1

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

作者: SHUTUP | 来源:发表于2015-04-19 08:55 被阅读466次

    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. 动态方法实现步骤:

    未完待续。。。

    相关文章

      网友评论

        本文标题:自己写视频播放器(3) Android JNI 使用1

        本文链接:https://www.haomeiwen.com/subject/ixsyfttx.html