AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别(转载)

自从AndroidStudio更新到2.2,就有了CMake和传统JNI两种开发NDK的方法,主要就是在目录结构和build.gradle上的区别,下面我们将分别介绍目录区别和build.gradle种配置的区别(提示:在第一次用CMake时,最好在新建项目时勾选Include C++ Support,这样这个项目的NDK开发就是CMake方式,这估计也是Android以后主推的方式,建好项目,熟悉CMake方式的目录结构,这样对以后建普通项目再转CMake开发NDK有很大帮助,后面会讲到普通项目转NDK开发)

目录上的区别:

传统JNI:

CMake:

这两种方式在目录上的区别就是两点:

1.以前的jni目录改成cpp,位置不变

2.之前对c文件的编译配置Android.mk文件放在jni目录下,现在改成CMakeLists.txt文件

(提示:其实Android.mk文件和CMakeLists.txt可以放在任意目录下,不过最好放在当前工程目录下任意位置。后面说build.gradle配置区别就知道了)

build.gradle的区别:

传统JNI:

CMake:

从上面两幅图可以发现,只有两个红框中的内容有区别,对于传统JNI,其实第二个红框中的内容可以不需要,它所有的配置都在

ndk{
    moduleName "hello"
    abiFilters "x86"
}

里面配置,Android.mk文件中的内容都不会起作用(提示:但是却不能删除它,在下面普通Android项目转NDK开发就知道),这点有区别于Eclipse开发环境。还有一点,传统JNI开发,需要在项目根目录下的gradle.properties文件中配置

android.useDeprecatedNdk=true

否则Build项目的时候会报错。


CMake的配置大部分都在CMakeLists.txt文件中配置,只有较少的一部分放到


cmake {
    cppFlags "-std=c++11"
}

里面配置。CMake的语法规则可以百度。

普通Android项目转NDK开发项目:

对于普通Android项目,都可以通过鼠标右击选择Link C++ Project with Gradle转为NDK项目,

通过选择CMake或者ndk-build使开发NDK采用CMake或者JNI方法,不过此种转化方法必须符合CMake或者JNI的目录

结构,也就是说,在上图操作完成之前,必须先在项目中建好符合CMake或者JNI规则的目录,假如CMakeLists.txt

文件中有对xx.cpp/xx.c的引用,那么必须在cpp目录下新建好对应的xx.cpp/xx.c,同理,android.mk文件要是引

用cpp/c文件,那么就要在jni目录新建好对应得文件.(androidstudio2.2之后新建NDK项目只能得到CMake方式,

所以要想JNI开发,只能普通项目转)。

文章转自:http://blog.csdn.net/u012527560/article/details/51752070

时间: 2024-12-22 15:34:26

AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别(转载)的相关文章

【Go web开发之revel+mgo】第11章 部署到heroku上

演示地址  http://gblog-revel.herokuapp.com/ 1.申请mongohq 关于如何在注册heroku和mongohq帐号,我在之前的blog里面有说明,http://blog.csdn.net/joveth/article/details/19999535 这里简单的说一下,还记得我们的models/dao.go文件里的NewDao方法中被注释的那一行吗? session, err := mgo.Dial("mongodb://omind:[email protec

<<Modern CMake>> 翻译 2.4 项目目录结构

<<Modern CMake>> 翻译 2.4 项目目录结构 本节内容有点跑题.但我认为这是一个很好的方法. 我将告诉你如何规划项目的目录. 这是基于惯例,但将帮助您: 轻松阅读其他按照相同模式的项目, 避免导致冲突的模式, 避免混淆和使构建变得复杂. 首先,如果您的项目被叫做 project,包含一个链接库叫做 lib,一个可执行文件叫做 app, 那么您的文件目录应该类似以下结构: - project - .gitignore - README.md - LICENCE.md

NDK开发之javaVM

1.关于JNIEnv和JavaVM JNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线程都可以使用这个JavaVM.当后台线程需要调用JNI native时,在native库中使用全局变量保存JavaVM尤为重要,这样使得后台线程能通过JavaVM获得JNIEnv. native程序中频繁使用JNIEnv*和JavaVM*.而C和C++代码使用JNIEnv*和JavaVM*这两个指针

NDK开发之ndk-build命令详解

毫无疑问,通过执行ndk-build脚本启动android ndk构建系统. 默认情况下,ndk-build脚本在工程的主目录中执行,如: 我们可以用使用-C参数改变上述行为,-C指定工程的目录,这样我们就可以在任何目录执行ndk-build脚本了. 如果源文件没有被修改,那么android ndk构建系统不会重新构建目标,这时我们可以使用参数-B来强制重新构建所有源代码. 如果想要清理生成的二进制文件和目标文件,可以使用ndk-build clean命令. android ndk构建系统依赖于

NDK开发之Application.mk文件详解

做过NDK开发的同学应该都知道有个Application.mk文件,这是android NDK构建系统使用的一个可选构建文件.它的目的是描述应用程序需要哪些模块,也定义了所有模块的一些通用变量.主要有以下几个变量. APP_MODULES,默认情况下,ndk会构建在android.xk文件中声明的所有模块.但是这个变量可是覆盖上述行为. 假如我们的android.mk文件是这样的: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_

IOS中APP开发之路

现在移动APP正式急速上升的趋势,然而占据着主要地位的还是这2大巨无霸:谷歌的Android与苹果的ios系统.那么,作为 程序员了解一下APP的开发流程思路是有所必要的,特别是正流行火热的APP市场.开发IOS的APP学习思路,翻译 了一个很牛B的网 络文章,并且大致的总结了一些IOS开发APP的流程思路,它不仅仅是初学者的导航灯,还是ios开发热衷粉丝的垫脚石.iOS系统以 及iPhone的出来都要感谢ios鼻祖---乔布斯,一个完美主义者,从如此优秀的iOS系统和iPhone就可以看出来.

Android NDK开发之Jni调用Java对象

https://my.oschina.net/zhiweiofli/blog/114064 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数.JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须参数.下表列出了用以得到静态(static)和实例(instance)的域与方法的JNI函数.每个函数接受(作为参数)域或方法的类,它们的名称,符号和它们对

NDK开发之JNIEnv参数详解

即使我们Java层的函数没有参数,原生方法还是自带了两个参数,其中第一个参数就是JNIEnv. 如下: native方法: public native String stringFromC(); public native String stringFromCpp(); 原生方法: jstring Java_com_example_jni_MainActivity_stringFromC(JNIEnv* env,jobject thiz){ return (*env)->NewStringUTF

android ndk开发之 extern &quot;C&quot; 编译出错

感叹:神一般的eclipse! 首先, 我这么写 extern "C" void func(){}; 代码爆红:(error: expected identifier or ‘(’ before string constant ) what the fuck!! 百度后是说c编译器不支持这种写法, 会报错, 虽然我知道我用的是c++编译器,然而决定还是改一下 #ifdef __cplusplus #define EXTERNC externc "C" #else #