zoukankan      html  css  js  c++  java
  • [Android] 环境配置之Android Studio开发NDK

     

    ========================================================
    作者:qiujuer
    博客:blog.csdn.net/qiujuer
    网站:www.qiujuer.net
    开源库:Genius-Android
    转载请注明出处:http://blog.csdn.net/qiujuer/article/details/42040963
    ========================================================

    NDK 开发哪家强?XX XX 找 Blue Fly.

    说到 NDK 开发,其实是为了有些时候为了项目需求需要调用底层的一些 C/C++ 的一些东西;另外就是为了效率更加高些。

    但是很多时候能不用就不用;这个是啥原因?个人感觉有些时候是觉得麻烦,首先要配置 NDK 还要 下载 Cygwin ,配置 Cygwin ,然后需要编译生成,哎太麻烦了。如果你说使用 Eclipse,的确这样在编译上是能简单很多,但是前期也是需要配置一大堆;哎,配置错了还伤不起。

    现在谷歌主力推动 Android Studio 这个是个不错的工具,至少现在来看在 Eclipse 上能做到的 这边都有,这边有的Eclipse上不一定有。

    下面来说说 在 Android Studio 中怎么进行 NDK 的开发。

    准备工作

    Android Studio 环境搭建

    在我的上一篇文章 [Android] 环境配置之正式版Android Studio 1.0 中有介绍了。

    NDK 环境搭建

    都是可执行文件,下载后点击即可解压到当前文件夹;当然你可以使用命令行来进行跨文件夹解压的。

    建立一个项目 NDKDemo:

    建立对应的类,在 MathKit 中我们实现计算 INT 值的平方数。

    [java] view plain copy 在CODE上查看代码片派生到我的代码片
    1. public class MathKit {  
    2.     public static native int square(int num);  
    3.   
    4.     static {  
    5.         System.loadLibrary("JniDemo");  
    6.     }  
    7. }  
    StringKit 这个就是充数用的:
    [java] view plain copy 在CODE上查看代码片派生到我的代码片
    1. public class StringKit {  
    2.     public static native void setNull(String str);  
    3.     static {  
    4.         System.loadLibrary("JniDemo");  
    5.     }  
    6. }  

    准备 .h 文件

    进入Java目录;CMD 进入该目录进行 javah 操作:

    这个想必大家并不陌生吧,该文件就是 java 类对应的 头文件,当然如果你比较厉害的话可以不用这样生成,自己敲代码完成也行;反正我是不行。

    如下,建立文件夹:

    拷贝之前的文件进去:

    分别实现:

    net_qiujuer_ndkdemo_jni_MathKit.cpp

    [cpp] view plain copy 在CODE上查看代码片派生到我的代码片
    1. #include <net_qiujuer_ndkdemo_jni_MathKit.h>  
    2.   
    3. JNIEXPORT jint JNICALL Java_net_qiujuer_ndkdemo_jni_MathKit_square  
    4.   (JNIEnv *env, jclass cls, jint num)  
    5.   {  
    6.         return num*num;  
    7.   }  
    net_qiujuer_ndkdemo_jni_StringKit.cpp
    [cpp] view plain copy 在CODE上查看代码片派生到我的代码片
    1. #include <net_qiujuer_ndkdemo_jni_StringKit.h>  
    2.   
    3. JNIEXPORT void JNICALL Java_net_qiujuer_ndkdemo_jni_StringKit_setNull  
    4.   (JNIEnv *env, jclass obj, jstring str)  
    5.   {  
    6.   
    7.   }  

    设置项目

    设置根目录中的:local.properties

    该设置不是必须,如果你设置了环境变量则可不用设置;如果没有但是又没有设置将会出现:


    设置 APP 项目 build.gradle

    该设置是为了设置生成的Jni名称为:JniDemo。

    主文件调用:

    现在点击运行:

    可以看见是非常简单的;这个调用可以说是我操作过最简单的了;甚至于生成 .H 文件都可以编辑 .sh 文件来进行批处理(这个后面有时间再说).

    更多

    在平时的那些操作中我们不可避免的要建立:

    Android.mk

    [cpp] view plain copy 在CODE上查看代码片派生到我的代码片
    1. LOCAL_PATH      := $(call my-dir)  
    2.   
    3. include $(CLEAR_VARS)  
    4.   
    5. LOCAL_MODULE    := genius  
    6. LOCAL_SRC_FILES := net_qiujuer_imageblurring_jni_ImageBlur.cpp  
    7. LOCAL_LDLIBS    := -lm -llog -ljnigraphics  
    8.   
    9. include $(BUILD_SHARED_LIBRARY)  
    Application.mk
    [cpp] view plain copy 在CODE上查看代码片派生到我的代码片
    1. APP_ABI     := all  
    2. APP_PLATFORM:= android-19  
    3. APP_OPTIM   := release  
    而这里这两个文件都没有建立,那么是怎么决定的呢?

    我们可以在 ndk 的 modelName 上按住 Ctrl 进行点击将会出现这个界面:



    这些就是全部能够设置的参数。分别对应:

    [ruby] view plain copy 在CODE上查看代码片派生到我的代码片
    1. ndk{  
    2.     moduleName "JniDemo" // 设置生成的文件名  
    3.     cFlags "-DANDROID_NDK -D_RELEASE" //这个对应的是生成模式  
    4.     ldLibs "m", "log", "jnigraphics" //这个对应 LOCAL_LDLIBS 但是需要去掉前面的 “l”  
    5.     abiFilters "all" //这个是对应的 APP_ABI  
    6.     stl "stlport_shared" //这个对应的是 APP_STL   
    7. }  

    好了,就这些祝大家成功。项目打包上传。

    本次项目点击这里下载。

    ========================================================
    作者:qiujuer
    博客:blog.csdn.net/qiujuer
    网站:www.qiujuer.net
    开源库:Genius-Android
    转载请注明出处:http://blog.csdn.net/qiujuer/article/details/42040963
    ========================================================

  • 相关阅读:
    Part 11 Search filter in AngularJS
    Part 10 AngularJS sort rows by table header
    Part 9 Sorting data in AngularJS
    Part 8 AngularJS filters
    Part 7Handling events in AngularJS
    Part 6 AngularJS ng repeat directive
    PHP单一入口应用程序概述
    SVN
    跨平台的.NET集成开发环境:MonoDevelop
    PHP中使用KindEditor
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5714257.html
Copyright © 2011-2022 走看看