Android自助餐之Jni(六)NDK入门
2016-06-18 01:12
351 查看
Android自助餐之Jni(六)NDK入门
Android自助餐之Jni六NDK入门Android自助餐专栏
Android自助餐之Jni一最简单的运行
Android自助餐之Jni二静态导入so文件
Android自助餐之Jni三动态导入so文件
Android自助餐之Jni四在线导入so文件
Android自助餐之Jni五进阶
Android自助餐之Jni六NDK入门
用途
步骤
Androidmk
文件内容
ndk已定义变量
module描述变量
NDK提供的方法宏
Applicationmk
其他
Android自助餐专栏
Android自助餐之Jni(一)最简单的运行
Android自助餐之Jni(二)静态导入so文件
Android自助餐之Jni(三)动态导入so文件
Android自助餐之Jni(四)在线导入so文件
Android自助餐之Jni(五)进阶
Android自助餐之Jni(六)NDK入门
用途
兼容不同平台复用代码库,或向外提供库
提高运行效率
步骤
设计app,明确Java与native的分工创建Project
如果用到了
NativeActivity,需要在
AndroidManiFest.xml声明
创建
Android.mk与
Application.mk
在
jni文件夹编写native代码
生成
.so或
.a文件
生成
.dex文件
生成
apk文件
Android.mk
文件内容
LOCAL_PATH :=$(call my-dir)指明代码文件根目录,该目录包含本Android.mk文件。Android.mk文件比以此开头
include $(CLEAR_VARS)清除LOCAL_PATH之外的LOCAL_开头的变量。必须在描述module前定义此变量
LOCAL_MODULE := jni-demo声明该jni的module名称,build后该module将生成libjni-demo.so文件。
如果module的名称本来就以
lib开头,则生成的so文件不会再增加
lib前缀。此举是为了支持安卓自带的源码,他们都是以
lib开头的
LOCAL_SRC_FILES := hello-jni.c列举需要被build的c或c++文件,多个文件用空格隔开。
include $(BUILD_SHARED_LIBRARY)集合所有信息并build到一起。
ndk已定义变量
自定义变量时,需要注意系统保留变量名:以LOCAL_
PRIVATE_
NDK_
APP开头的变量名;小写字母的变量(如
my-dir)。推荐使用
MY_开头来定义自己的变量。
1.
CLEAR_VARS取消定义以
LOCAL_开头的变量,需要在描述module前使用,语法:
include $(CLEAR_VARS)
1.
BUILD_SHARED_LIBRARY决定如何build,需要在指定
LOCAL_MODULE和
LOCAL_SRC_FILE之后使用,语法:
include $(BUILD_SHARED_LIBRARY)
1.
BUILD_STATIC_LIBRARYbuild一个static的library。生成的库不会被copy到project和包中,但是可以被用来build到shared的library。语法:
include $(BUILD_STATIC_LIBRARY)
1.
PREBUILT_SHARED_LIBRARY用于build一个使用了其他SHARED_LIBRARY的library,这里的
LOCAL_SRC_FILES的值不是代码文件,而是已build的库文件(如foo或libfoo.so)。用法:
include $(PREBUILT_SHARED_LIBRARY)
1.
PREBUILT_STATIC_LIBRARY用于build一个使用了其他STATIC_LIBRARY的library,其他同
PREBUILT_SHARED_LIBRARY。
1.
TARGET_ARCH指明目标CPU架构的名称
1.
TARGET_PLATFORM指明目标平台的Android版本,比如用于5.1系统则为
TARGET_PLATFORM = android-22
1.
TARGET_ARCH_ABI存放目标CPU的架构名。用法:
TARGET_ARCH_ABI :=arm64-v8a
|CPU|Setting|
|:—:|:—:|
|ARMv5TE|armeabi|
|ARMv7|armeabi-v7a|
|ARMv8 AArch64|arm64-v8a|
|i686|x86|
|x86-64|x86_64|
|mips32(r1)|mips|
|mpis64(r6)|mips64|
|All|all|
1.
TARGET_ABI同时制定android平台和CPU架构,用法
TARGET_ABI := android-22-arm64-v8a
module描述变量
LOCAL_PATH
LOCAL_MODULE
LOCAL_MODULE_FILENAME
LOCAL_SRC_FILES
LOCAL_CPP_EXTENSION
LOCAL_CPP_FEATURES
LOCAL_C_INCLUDE
LOCAL_CFLAGS
LOCAL_CPPFLAGS
LOCAL_STATIC_LIBRARIES
LOCAL_SHARED_LIBRARIES
LOCAL_WHOLE_STATIC_LIBRARIES
LOCAL_LDLIBS
LOCAL_LDFLAGS
LOCAL_ALLOW_UNDEFINED_SYMBOLS
LOCAL_ARM_MODE
LOCAL_ARM_NEON
LOCAL_DISABLE_NO_EXECUTE
LOCAL_DISABLE_RELRO
LOCAL__DISABLE_FORMAT_STRING_CHECKS
LOCAL_EXPORT_CFLAGS
LOCAL_EXPORT_CPPFLAGS
LOCAL_EXPORT_C_INCLUDES
LOCAL_EXPORT_LDFLAGS
LOCAL_EXPORT_LDLIBS
LOCAL_SHORT_COMMANDS
LOCAL_THIN_ARCHIVE
LOCAL_FILTER_ASM
NDK提供的方法宏
my-dir
all-subdir-makefiles
this-makefile
parent-makefile
grand-parent-makefile
import-module
Application.mk
其他
如果两个方法有同样签名,则会报出连接错误link error,C中的签名仅包括方法名,C++中的签名包括方法名及参数。
相关文章推荐
- Android内存泄漏(使用单例模式造成的内存泄漏)
- Android内存泄漏(Handler造成的内存泄漏(二))
- Android应用自动更新功能的代码实现
- [置顶] Android开发之常用框架WebView详解代码。超详细,送给初学者,完全掌握此控件
- 拍照 录像
- 详细介绍android回调机制及其使用
- Android Studio建立jni开发环境
- Android图片压缩学习
- Android之常用开发框架
- Android MediaPlayer工具类
- (OK)(OK)(All in CLI) running two Android-x86 which connect to NS3(MANETs) via "ethernet bridge"
- Android NDK开发篇:Java与原生代码通信(异常处理)
- Android NDK开发篇:Java与原生代码通信(数据操作)
- Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)
- Android学习之消息框
- androidstudio下NDK正确姿势
- Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)
- Android中的消息机制
- Android 聊天界面适配器
- Android 背景动画