摘要:以前的开发都是在和中设置现在在的设置编译选项。其中包含了设置编译器配置,版本头文件位置编译器选项等下面介绍下几个常用的编译选项。例如在项目中链接的和表示用于编译器的选项。是设置的运行时库的选项默认使用的是最小支持的库。
NDK即要支持交叉编译,还需要支持各个Android版本的编译,还有一些其他情况的编译,比如c和c++等。NDK提供了一些编译选项,用来支持不同的编译需求。
以前的NDK开发都是在Android.mk和Appliction.mk中设置,现在在gradle-experimental的android.ndk{}设置编译选项。
其中包含了设置:编译器配置,NDK版本,Header头文件位置,gcc编译器选项等...
下面介绍下几个常用的编译选项。
platformVersion大部分的App需要向下兼容,会设置minSdkVersion,从一个低版本的Sdk开始支持。同样的在低SDK版本上面运行的NDK也必须使用对应的NDK,就需要设置platformVersion。
设置minSdkVersion为14,对应的也需要设置platformVersion也是14:
model{ android{ ndk{ .... platfromVersion=14 } } }
也可以使用paltformVersion "android-14"设置NDK的版本。
toolchaintoolchain是NDK下的一套文件系统和工具链,主要有GCC,编译adnroid的库和工具等,是本机编译工具或交叉编译工具。
在gradle中直接指定toolchain和toolchainVersion:
model { android { ...... ndk { ...... toolchain "clang" toolchainVersion "3.5" } ...... } }ABI
Android系统目前支持其中七种不同的CPU架构:ARMv5,ARMv7,x86,MIPS,ARMv8,MIP64,x86_64,每一种都关联着一个相应的ABI。
Application Binary interface应用程序二进制接口,定义了二进制文件(尤其是.so文件)是如何运行在相应的系统平台上的,从使用的指令集,内存到对齐到可用的系统函数库。在Android系统上,每一CPU架构对应一个ABI。
对应的.so文件会放在对应的ABI文件下面:
一般情况下,考虑到x86系统的市场份额还太小,还有为了减少apk包的大小,可以指定支持的平台,使用abiFilters,可以选择项目支持的平台,比如只支持armabi和armeabi-v7a的配置:
... ndk { ... abiFilters.addAll(["armabi", "armeabi-v7a"]) ... } ...ldLibs
使用NDK开发Android应用时,会使用到系统自带的库,在之前的*.mk中的LOCAL_LDLIBS就是用来引用系统库的,现在使用在Android studio中可以配置ldLibs引用系统库。
例如在项目中链接android的log:
ndk { ... ldLibs.addAll(["log"]) }CFlags和CppFlags
CFlag表示用于C编译器的选项。
CppFlags用来表示用于c++的编译器选项.
使用ldLibs告诉了链接器要链接那些库文件,而在CFlags和CppFlags可以用来指定.h文件的路径。
例如指定一个.h文件的目录:
ndk { ... CFlags.addAll(["-I/usr/local/ssl/android-14/include"]) ... }
CFlag也是gcc的编译选项,比如使用-Wall表示打开警告开发,-g是要生成调试信用,生成的可执行文件具有和源代码关联的可调试信息。
stlstl是设置c++的运行时库的选项,默认使用的是libstdc++最小支持的c++库。
如果要使用gnustl_static(静态链接gnustl版本的stl)可以设置为:
ndk { ... stl = "gnustl_static" cppFlags.addAll(["-std=c++11"]) ... }
在这里可以看到NDK支持的对应的c++运行库,建议使用动态方法链接stl,这样可以减少apk的大小。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/13097.html
摘要:在上开发对于安全的需求越来越高,虽然出现过几次漏洞,但它仍然是在安全方面的使用最多的加密库之一。这篇文章主要写的是如何编译的类库。 OpenSSL是一个强大的开源安全套接字层密码库,它包含了主要的密码学算法,常用的密钥和证书封装管理以及SSL协议,并提供丰富的应用程序供测试或其他目的使用。在Android上开发对于安全的需求越来越高,虽然OpenSSL出现过几次漏洞,但它仍然是在安全方...
摘要:在项目主目录下的中更改配置增加的配置在中。源代码配置默认情况下,在下使用的是文件。也可以在中指定在分别指定了源代码和源代码的目录。以上的配置完成之后,就可以使用开始开发了。 使用NDK开发有件比较麻烦的事情就是编写Application.mk和Android.mk的,而Android Studio 的插件gradle-experimental就是用来解决这个这个问题的。使用gradle...
摘要:介绍了在中配置的开发环境开发环境配置,开发环境配置完成之后,就要写一下著名的程序了。尤其是但是并不妨碍你使用其他语言,只要调用约定支持就可以了。是指定所在的目录,项目成功之后,会在目录里生成文件。是包名加上类名。 介绍了在Android Studio中配置NDK的开发环境:Android Studio NDK开发-环境配置,NDK开发环境配置完成之后,就要写一下著名的Hello Wor...
摘要:介绍了在中配置的开发环境开发环境配置,开发环境配置完成之后,就要写一下著名的程序了。尤其是但是并不妨碍你使用其他语言,只要调用约定支持就可以了。是指定所在的目录,项目成功之后,会在目录里生成文件。是包名加上类名。 介绍了在Android Studio中配置NDK的开发环境:Android Studio NDK开发-环境配置,NDK开发环境配置完成之后,就要写一下著名的Hello Wor...
摘要:是一个高效的的调试器,是与编译器一起使用,提供了丰富的流程控制和数据检测有效的帮忙我们调试程序。常用命令打印命令,打印变量以及其值仅打印变量的值就是调用的意思,上述和也有调用的功能。一般只在不需要显示输出,或是方法无返回值时使用。 LLDB是一个高效的c/c++的调试器,是与LLVM编译器一起使用,提供了丰富的流程控制和数据检测,有效的帮忙我们调试程序。LLDB也已经取代GDB成为XC...
阅读 2150·2021-10-14 09:42
阅读 744·2021-09-26 09:47
阅读 684·2019-08-30 14:05
阅读 1569·2019-08-30 11:08
阅读 3096·2019-08-29 15:41
阅读 1402·2019-08-27 14:19
阅读 3459·2019-08-23 18:31
阅读 1369·2019-08-23 18:29