Ndk 开发自己搞

开发了两年安卓,NDK始终是绕不过的弯。还是需要搞下啊。本文大概分为4个部分。

1.环境搭建

我采用的是eclipse 搭建环境, 网上一搜一大堆,但是有些比较蒙人,ndk r8 r9 其实不要 Cygwin ,谁要说需要这个玩意,就是坑人啊!
废话不说,首先搞个ndk tools ,然后下载ndk 。
这里写图片描述

具体详见:

http://blog.csdn.net/pengchua/article/details/7582949

2. 开发

开发的时候,需要在右键,---》Android Tools --》添加natvie 依赖,然后你就得到了 ndk 的工作目录。
注意点如下:

   2.1 Android.mk 配置

           .mk 这个玩意是Linux编译的脚本,具体怎么配置以后再学习,这里只需要知道怎么编译出来一个.so 文件即可.

   2.2 关于命名规则

           这简直是一个大坑,真坑人,函数的命名采用的是 包名+类名+方法

   2.3 关于so文件

             自动生成的.so 文件,lib+example+.so 

             在加载库文件的时候,只需要 写example 就好。
  1. 代码如下:

     public native String  stringFromJNI();
     public native int plus(int x,int y);
    
    static {
        System.loadLibrary("NdkTest");
    }


    extern "C"
    {
    jstring Java_com_example_ndktest_MainActivity_stringFromJNI( JNIEnv* env,jobject thiz);
    jint Java_com_example_ndktest_MainActivity_plus(JNIEnv* env,jobject thiz,jint x,jint y);
    };
    jint Java_com_example_ndktest_MainActivity_plus(JNIEnv* env,
        jobject thiz,jint x,jint y){
    return x+y;
    }
    
    
    jstring Java_com_example_ndktest_MainActivity_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
    {
    \#if defined(__arm__)
    
    #if defined(__ARM_ARCH_7A__)
    
    
    #if defined(__ARM_NEON__)
    
      #if defined(__ARM_PCS_VFP)
        #define ABI "armeabi-v7a/NEON (hard-float)"
      #else
        #define ABI "armeabi-v7a/NEON"
      #endif
    
    #else
    
      #if defined(__ARM_PCS_VFP)
        #define ABI "armeabi-v7a (hard-float)"
      #else
        #define ABI "armeabi-v7a"
      #endif
    
    #endif
    
    
    #else
    
    
    #define ABI "armeabi"
    
    
    #endif
    
    \#elif defined(__i386__)
    
    #define ABI "x86"
    
    \#elif defined(__x86_64__)
    
    #define ABI "x86_64"
    
    \#elif defined(__mips64)  /* mips64el-* toolchain defines __mips__ too */
    
    #define ABI "mips64"
    
    \#elif defined(__mips__)
    
    #define ABI "mips"
    
    \#elif defined(__aarch64__)
    
    #define ABI "arm64-v8a"
    
    \#else
    
    #define ABI "unknown"
    
    \#endif
    const char* c = "hello how are you i am ahmad raza";
    jstring s = env->NewStringUTF(c);
    return  s;
    }

3结果如图:

这里写图片描述

4.参考如下:

http://wear.techbrood.com/tools/sdk/ndk/
http://developer.android.com/ndk/samples/sample_hellojni.html
https://github.com/googlesamples/android-ndk

ps

那些个,自己没有运行起来却写博客的人,真是一个坑!!!!!!!!!!!!!!
代码下载地址

http://download.csdn.net/detail/gezihau/9293781

猜你喜欢

转载自blog.csdn.net/gezihau/article/details/49999803
今日推荐