zoukankan      html  css  js  c++  java
  • android ------- 运行官方NDK 案例HelloJNI

    下载案例 HelloJNI ,导入工程到Eclipse,  可以直接下载我的案例,

    源码下载:https://github.com/DickyQie/android-ndk

    目录图

    使用命令生成  .so 文件,如下图

    之后生成了很多文件

    先来看看代码:

    public class MainActivity extends Activity {
    
        //静态代码块加载C语言库文件
        static{
            System.loadLibrary("hello");
        }
        
        /*
         * 声明一个native方法
         * 这个方法在Java中是没有实现的, 没有方法体
         * 该方法需要使用C语言编写
         */
        public native String helloFromJNI();
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            System.out.println(helloFromJNI());
        }
    
        public void onClick(View view) {
            //点击按钮显示从jni调用得到的字符串信息
            Toast.makeText(getApplicationContext(), helloFromJNI(), 1).show();
        }
        
    }

    hello.c 文件 (Java利用JNI来调用C中的helloFromJNI方法)

    #include <jni.h>
    
    /*
     * 方法名称规定 : Java_完整包名类名_方法名()
     * JNIEnv 指针
     *
     * 参数介绍 :
     * env : 代表Java环境, 通过这个环境可以调用Java中的方法
     * thiz : 代表调用JNI方法的对象, 即MainActivity对象
     */
    jstring Java_com_zhangqie_ndkhelloworld_MainActivity_helloFromJNI(JNIEnv *env, jobject thiz)
    {
        /*
         * 调用 android-ndk-r12bplatformsandroid-9arch-armusrinclude 中jni.h中的方法
         * jni.h 中定义的方法  jstring (*NewStringUTF)(JNIEnv*, const char*);
         *
         * 可以根据路径找到该方法
         *
         */
        return (*env)->NewStringUTF(env, "hello world zhangqie");
    }

    还有一个 Android.mk

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

    运行项目如图:

     

    调用成功

  • 相关阅读:
    Quick QEMU
    Linux 常用命令速查
    Linux 安装篇
    Vivaldi解决flash插件问题
    VNC 安装 (适用Redhat 9.0 和 CentOS 7.0+)
    Git使用笔记 (github为例)
    poj3045 Cow Acrobats(二分最大化最小值)
    poj3104 Drying(二分最大化最小值 好题)
    poj3468 A Simple Problem with Integers(线段树区间更新)
    poj1852 Ants(思维)
  • 原文地址:https://www.cnblogs.com/zhangqie/p/8891181.html
Copyright © 2011-2022 走看看