• 他的第一个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吧、

    稍完成。

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

  • 相关阅读:
    Selenium 3 + BrowserMobProxy 2.1.4 模拟浏览器访问 (含趟坑)
    macOS Sierra WiFi connecting problem
    Accumulator<Long> implements of JavaSparkContext in Spark1.x
    写了一个Android动画的启动界面
    用C#简单实现了数据的封装
    关于JAVA数据结构中的栈操作
    写了一个关于将XML文件导入数据库的程序(C#,sql server)
    经典电影里的数学应用
    初步学习多线程操作,代码不是完美的,欢迎大牛指点(运行通过)
    写了一份统计网站(ASP.NET)日访问量的源码(保存至数据库,部分性能待优化),运行通过。
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4851377.html
Copyright © 2020-2023  润新知