使用Android Studio与Eclipse开发NDK的对比

来源:互联网 发布:centos php exec 权限 编辑:程序博客网 时间:2024/06/05 06:28

最近开发的一个项目中用到了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 0
原创粉丝点击