zoukankan      html  css  js  c++  java
  • 他的第一个NDK的Demo

    DEMO下载链接http://download.csdn.net/detail/logicsboy/7535409

    首先给你们恶补下啥是NDK:(我从百度Copy的) 

    NDK全称:Native Development Kit。
    1、NDK是一系列工具的集合。
    * NDK提供了一系列的工具,帮助开发人员高速开发C(或C++)的动态库,并能自己主动将so和java应用一起打包成apk。

    这些工具对开发人员的帮助是巨大的。[1] 

    * NDK集成了交叉编译器,并提供了对应的mk文件隔离平台、CPU、API等差异,开发者仅仅须要简单改动mk文件(指出“哪些文件须要编译”、“编译特性要求”等)。就能够创建出so。

    * NDK能够自己主动地将so和Java应用一起打包,极大地减轻了开发者的打包工作。

    2、NDK提供了一份稳定、功能有限的API头文件声明。
    Google明白声明该API是稳定的,在兴许全部版本号中都稳定支持当前公布的API。从该版本号的NDK中看出。这些API支持的功能很有限。包括有:C标准库(libc)、准数学库(libm)、压缩库(libz)、Log库(liblog)。

    ==========================================================
    好了,接下来我们在了解了解啥时JNI  ? 
    JNI是Java Native Interface的缩写,中文为JAVA本地调用。
    从Java1.1開始,Java Native Interface(JNI)标准成为java平台的一部分,它同意Java代码和其它语言写的代码进行交互。
    JNI一開始是为了本地已编译语言,尤其是C和C++而设计的,可是它并最好还是碍你使用其它语言,仅仅要调用约定受支持就能够了。

    ========================================================
    好了概念大致就是上面那样,接下来我们要看看怎么构建自己的第一个NDK程序咯。
    步骤啥的有图的看图,有文字的看文字吧。
    1.先创建AndroiddProject。创建一个helloNDK.java:

    MainActivity.java文件:


    2.然后编译上述文件产生的 .class文件。由于eclipse保存之后,就会自己主动编译。

    保存之后,去找你的.class文件吧、


    找到helloNDK.class文件的路径。
    3.使用javah工具,产出C语言的*.h头文件,
       在项目project建立一个jni的目录.
       
      打开Windows命令窗体,并进入jni文件夹区域,运行javah工具去读取上述的            helloNDK.class文件,从而生成*.h头文件。输入命令:

    然后回车,注意文件夹别弄错了。然后会在jni文件夹以下生一个com_misoo_pk01_helloNDK.h的文件,当然你也能够设定生成的文档的名称。

    命令例如以下:javah -o helloNDK.h -classpath ../bin/classes com.misoo.pk01.hellNDK
    生成的com_misoo_pk01_helloNDK.h文件内容例如以下:
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_misoo_pk01_helloNDK */
    
    #ifndef _Included_com_misoo_pk01_helloNDK
    #define _Included_com_misoo_pk01_helloNDK
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_misoo_pk01_helloNDK
     * Method:    sayHello
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_misoo_pk01_helloNDK_sayHello
      (JNIEnv *, jobject);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    最好不要自己手动去改动它吧,我也懒的去试,毕竟这是命令生成的。

    不关我们的事。


    4.然后我们就能够把这个*.h的文件。交给C端开发人员去,结合JNI语法,撰写xxx.c的代码,
    我们如今的这个程序的xxx.c的代码例如以下(前提你的代码和我的一样)
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include "com_misoo_pk01_helloNDK.h"
    
    JNIEXPORT jstring JNICALL
    	Java_com_misoo_pk01_helloNDK_sayHello
    		(JNIEnv *env, jobject thiz){
    
    		return (*env)->NewStringUTF(env,"Hello,NDK....");
    }
    

    5. 我们须要在NDK包的安装文件夹下拷贝一个Android.mk的文件到jni文件夹,而且内容为:
    # Copyright (C) 2009 The Android Open Source Project
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    #
    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE    := helloNDK
    LOCAL_SRC_FILES := com_misoo_pk01_helloNDK.c
    
    include $(BUILD_SHARED_LIBRARY)
    

    注意内容不能错了。


    6.接下来我就须要将这个项目放到NDK的samples文件夹以下

    7.然后使用cygwin工具编译生成.so文件


    编译的关键命令在找到文件夹之后:../../ndk-build然后回车即可了。
    最后生成的.so文件你就能够粘到libs文件夹以下了

    最后复制到你的项目中,開始run吧、

    稍完成。

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    CodeForces Gym 100500A A. Poetry Challenge DFS
    CDOJ 486 Good Morning 傻逼题
    CDOJ 483 Data Structure Problem DFS
    CDOJ 482 Charitable Exchange bfs
    CDOJ 481 Apparent Magnitude 水题
    Codeforces Gym 100637G G. #TheDress 暴力
    Gym 100637F F. The Pool for Lucky Ones 暴力
    Codeforces Gym 100637B B. Lunch 找规律
    Codeforces Gym 100637A A. Nano alarm-clocks 前缀和
    TC SRM 663 div2 B AABB 逆推
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4851377.html
Copyright © 2011-2022 走看看