美文网首页
Android NDK

Android NDK

作者: 笑哈哈的精彩 | 来源:发表于2016-06-07 16:44 被阅读124次

    最近朋友面试老是被问到Android DNK,问JNI调用的原理。对此小弟对面试官很想吐槽一下,请不要装逼,装逼澡雷劈。个人认为,如果项目中需要使用JNI调用C/C++代码, 那么说明使用Java 会严重影响了效率, 那么这个C/C++代码一定不是Android开发写的。一是:毕竟是Java开发,不是C/C++开发。二是:赚的是Java开发的钱,不是C/C++开发。那么请各位面试官不要问JNI这么高雅的问题。 没有意义。如果项目中真的需要用到JNI,那么我相信 使用大Google能在一个小时内解决问题。因此我认为JNI不是用来装高逼格的。
    如果面试官问NDK,我建议如此回答:

    我会使用JNI调用C/C++的代码, 但是如果让我去用C/C++去实现相关业务的算法代码,这我做不了。

    吐槽归吐槽但是需要了解的还是要去了解一下。只能说用渊博的知识打动装逼般的面试官。

    下面是Mac环境使用NDK
    编辑工具:Android Studio
    创建一个JNI的加载类,比如LoadJNI.java

    public class LoadJNI {    
      static {        
        System.loadLibrary("JNIDemo");    
      }    
      public native String getString();
    }
    

    JNIDemo是模块名称
    需要在build.grade中配置

    defaultConfig {   
     applicationId "com.liu.learning.androidlearning"        minSdkVersion 16   
     targetSdkVersion 23   
     versionCode 1   
     versionName "1.0"   
     ndk{        
        moduleName "JNIDemo"    
      }
    }
    

    打开电脑终端或者是Terminal
    到达项目的java目录下,执行

    javah -d ../jni com.liu.learning.androidlearning.jni.LoadJNI
    
    

    ../jni是java目录下的jin目录

    该行命令是生成LoadJNI这个加载类的C/C++代码类,并放在jni目录中。

    我以C++为例
    以生成的.h头文件为原本,复制一个副本改成.cpp文件

    在.cpp文件中给JNI加载方法中的参数类型加上参数名

    使用方式:

    LoadJNI jni = new LoadJNI();
    Toast.makeText(MainActivity.this,jni.getString(),Toast.LENGTH_LONG).show();
    

    相关文章

      网友评论

          本文标题:Android NDK

          本文链接:https://www.haomeiwen.com/subject/wykfdttx.html