zoukankan      html  css  js  c++  java
  • Android NDK学习(三):Hello World

    版权声明:转载请说明出处:http://www.cnblogs.com/renhui/p/6925810.html

    首先编写Jni接口的c文件,此文件命名有些特殊,具体的命名方式可以参考文档来做。

    #include <jni.h>
    #include <string.h>
    #include <stdio.h>
    
    
    JNIEXPORT jstring JNICALL
    Java_com_renhui_mplayer_MainActivity_displayHelloWorld(JNIEnv *env, jobject obj)
    {
        return (*env)->NewStringUTF(env, "11111");
    }

    配置Android.mk

    #定义本地路径变量 LOCAL_PATH
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := native-lib
    LOCAL_SRC_FILES := native-lib.c
    include $(BUILD_SHARED_LIBRARY)

    配置好mk文件后,在jni目录下执行ndk-build,即可获得当前所有的cpu平台的so文件。将so文件导入到项目中后,再写Java层的代码。

    Java 代码

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText(displayHelloWorld());
        }
    
        /**
         * A native method that is implemented by the 'native-lib' native library,
         * which is packaged with this application.
         */
        public native String displayHelloWorld();
    
        // Used to load the 'native-lib' library on application startup.
        static {
            System.loadLibrary("native-lib");
        }

    写完后,执行可以在真机上看到屏幕中有11111的内容输出。此时,NDK的hello world的学习就结束了,后续理解其他的NDK项目时,可以根据此思路来做相应的理解和调整。

    -------------------------------------------- 补充一:日志工具类AndroidLog -----------------------------------------------------------

    当我们跑通了HelloWorld之后,我们会想到如何在JNI层像Android原生开发一样输出Log内容到LogCat,这样能帮助我们更加快速的定位问题。只需要在jni层添加AndroidLog.h文件即可,头文件代码如下:

    #pragma once
    
    #ifdef ANDROID
    
    #include <jni.h>
    #include <android/log.h>
    
    #define LOGE(format, ...)  __android_log_print(ANDROID_LOG_ERROR, "renhui", format, ##__VA_ARGS__)
    #define LOGI(format, ...)  __android_log_print(ANDROID_LOG_INFO,  "renhui", format, ##__VA_ARGS__)
    
    #else
    #define LOGE(format, ...)  printf("renhui" format "
    ", ##__VA_ARGS__)
    #define LOGI(format, ...)  printf("renhui" format "
    ", ##__VA_ARGS__)
    #endif
  • 相关阅读:
    FPGrowth 实现
    数据库事务的4个特性ACID
    redis简介(keeper实时报表的基本部分)
    HADOOP中的CRC数据校验文件
    潜在语义分析
    AdaBoost 算法
    cocosBuilder生成cbbi文件,绑定到cocos2d-x
    C++继承模型
    Android应用经典主界面框架之中的一个:仿QQ (使用Fragment, 附源代码)
    从今天開始学习iOS开发(iOS 7版)--实现一款App之Foundation框架的使用
  • 原文地址:https://www.cnblogs.com/renhui/p/6925810.html
Copyright © 2011-2022 走看看