美文网首页
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