最近开发的一个项目中用到了JNI,所以针对Android的两大IDE开发NDK做了一下对比。

Android Studio开发NDK的配置

我使用的是稳定版的2.0的插件,默认情况下它是不支持NDK的,即如果你在build.gradle中配置了ndk属性是无法别识别的。

这个时候我们只需要在gradle.properties中配置以下属性即可

android.useDeprecatedNdk=true

当我第一次配置时,android studio报错无法识别前边提到的ndk属性,提示在gradle.properties文件中添加上面的属性。

网上有很多文章提到使用试验版的插件以支持ndk,我觉得这样费事费力,而且迁移项目时容易遇到麻烦,毕竟使用稳定版插件的还是大多数。

从创建项目到一步一步添加实现JNI的整个流程网上有很多,这里就不再赘述,这里边贴一个链接 - 用Android Studio 运行ndk 程序

Eclipse开发NDK的配置

eclipse没有什么好多说的,同样,贴一个链接 - Eclipse下的Android JNI 开发

两者的区别

编译配置

编译配置主要包括3个部分:library的名字,支持的cpu架构,需要编译的源代码

以android官方提供的例子”HelloJNI”为例,这些配置在两个文件中:Android.mk与Application.mk

Android.mk文件内容如下:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)

Application.mk文件内容如下:

APP_ABI := all

由上可以很方便的看出来,library的名字和哪些源代码需要编译一般在Android.mk文件中配置,而Application.mk文件一般负责指定支持哪些cpu架构。

如果我们使用Eclipse,则上面的配置文件必不可少,否则IDE无法编译c/c++代码。
但是到了Android Studio,这两个文件则被build.gradle中的ndk属性取代了。

下面是在Android Studio中等价的配置

ndk {      moduleName "hello-jni"      // adbFilters "armeabi", "armeabi-v7a", "x86"        }

如果要指定支持的cpu架构,则可以取消上面的注释,否则则会生成所有支持的cpu架构的libraries

其实ndk属性的配置只是对Android.mk的配置做了一层封装,如果你观察仔细的话,会在目录build/intermediates/ndk/debug中发现IDE自动帮你生成了Android.mk文件,内容如下

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := jni-utilLOCAL_LDFLAGS := -Wl,--build-idLOCAL_SRC_FILES := \    /XXX/HelloJNI/src/main/jni/hello-jni.c \LOCAL_C_INCLUDES += /XXX/HelloJNI/src/main/jniLOCAL_C_INCLUDES += /XXX/HelloJNI/src/debug/jniinclude $(BUILD_SHARED_LIBRARY)

可以看到,与Eclipse版本里的Android.mk文件内容基本一致。

C++编码支持

在这个方面,Android Studio甘拜下风,在它里边写代码就像在记事本里边写一样,没有任何代码提示。
在Eclipse中可以在项目属性中的”C/C++ general”->”Paths and Symbols”里配置开发使用到的头文件,配置好之后就有代码提示和跳转功能了,配合Eclipse平台上的CDT插件,编写C++代码还是比较方便的。

Native调试

Eclipse无疑是可以Native调试的,不过我并没有调试成功,以后有空再试试。
如何调试可以参考:
eclipse 单步调试JNI
Android平台使用GDBServer 调试Native C代码

Android Studio倒是调试成功了,不过需要在build.gradle中添加以下配置,参考 build type isn’t jni debuggable error

debug {         debuggable = true         jniDebuggable = true}

总结

如果要编写比较多的C++代码,那么还是不要用Android Studio了,毕竟记事本的效率大家可想而知。
其它的比如编译、调试Android Studio支持的还不错,相信以后的版本会支持的更好,包括写C++代码。

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 读取android手机流量信息
  4. android 使用html5作布局文件: webview跟javascript交互
  5. android studio调试c/c++代码
  6. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  7. android“设置”里的版本号
  8. Android开发环境搭建
  9. Android(安卓)Resource介绍和使用

随机推荐

  1. Android(安卓)数据库框架GreenDao与LiteP
  2. android UiAutomator利用am命令启动和结
  3. android透明activity
  4. Android(安卓)升级 SDK,安装4.0及以上SDK
  5. android:View.setTag()与View.getTag()的
  6. android 标题栏不显示?
  7. android singleTask使用情况,场景分析
  8. Android(安卓)Audio代码分析7 - stream t
  9. Andriod(三):配置文件build.gradle与Android
  10. Android(安卓)中Preferences的使用!