AnroidNDK开发介绍.docx_第1页
AnroidNDK开发介绍.docx_第2页
AnroidNDK开发介绍.docx_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一. 开发环境搭建首先确保安装好了编译环境,然后再下载NDK 代码:下载地址:/sdk/ndk/index.html然后将ndk包解压后(我的放在liuhaibo/ndk_linux),配置环境变量$gedit /.bashrc 在最后添加export PATH=$PATH:/home/liuhaibo/ndk_linux/让设置马上生效$ source /.bashrc$ ndk-build提示” ndk-buildAndroid NDK: Could not find application project directory !”表明OK.二. NDK为App开发共享库 在进行NDK开发时,一般需要同时建立Android工程和C/C+工程,然后使用NDK编译C/C+工程,形成可以被调用的共享库,最后共享库文件会被拷贝到Android工程中,并被直接打包到apk文件中。 进行Android NDK开发一般要经过如下的步骤l 建立Application.mk文件l 建立Android工程l 建立Android.mk文件l 建立C源代码文件l 编译共享库模块1 建立Application.mk文件a. 首先将nativie放到/jni下面;b. 创建/jni/Android.mk文件,用于ndk编译;Android.mk是为NKD编译系统准备的脚本文件,用来描述模块需要编译C/C+文件的信息 通常NKD编译系统会搜寻$NDK/sources/*/目录中的所有Android.mk文件,但如果程序开发人员将Android.mk文件放置在下一级目录中,则需要在上一级目录中的Android.mk文件添加如下代码 include $(call all-subdir-makefiles) 一个Android.mk示例如下:1. LOCAL_PATH := $(call my-dir)2. include $(CLEAR_VARS)3. LOCAL_MODULE := hello-jni4. LOCAL_SRC_FILES := hello-jni.c 5. include $(BUILD_SHARED_LIBRARY) 每个Android.mk文件都必须以第1行代码开始,变量LOCAL_PATH用来定义需要编译的C/C+源代码的位置,my-dir由NKD编译系统提供,表示当前目录的位置。代码第2行的include $(CLEAR_VARS)表示清空所有以LOCAL_开始的变量,例如LOCAL_MODULE、LOCAL_SRC_FILES、LOCAL_STATIC_LIBRARIES等,但第1行定义的LOCAL_PATH不在清空的范围内。因为所有的脚本都将粘贴到同一个GNU Make的执行上下文中,而且所有变量都是全局变量,因此必须在每次使用前清空所有以前用过的变量第3行代码变量LOCAL_MODULE用来声明模块名称,模块名称必须唯一, 且中间不能够存在空格。NKD编译系统将会在模块名称前自动添加lib前缀,然后生 产so文件。这里的模块名称为hello-jni,生产的共享库文件名为libhello-jni.so。但需要注意的是,如果程序开发人员使用具有lib前缀的模块名称,NKD编译系统将不再添加前缀,例如模块名称为libsub,生产的共享库文件名为libsub.so. 第4行代码中的变量LOCAL_SRC_FILES表示编译模块所需要使用的C/C+文件 列表,但不需要给出头文件的列表,因为NKD编译系统会自动计算依赖关系。hello-jni仅需要一个C文件,文件名为hello-jni.c。缺省情况下,结尾名为.c的文件是C语言源文件,结尾名为.cpp的文件是C+语言源文件第5行代码include $(BUILD_SHARED_LIBRARY)表示NKD编译系统构建共享库,如果变量BUILD_SHARED_LIBRARY更改为BUILD_STATIC_LIBRARY,则表示需要NKD编译系统构建静态库.c. 创建/jni/Application.mk (可选);在进行NDK开发时,在应用程序目录中要有Application.mk文件,用来声明Android工程需要调用的非托管模块(如静态库或共享库)AndroidNdkDemo示例的Application.mk的代码如下:APP_PROJECT_PATH := $(call my-dir)/ProjectAPP_MODULES := hello-jni第1行的变量APP_PROJECT_PATH表示Android工程所在的目录,在生产共享库文件后,APK将自动将共享库文件拷贝到libsarmeabi目录中,本示例将共享库文件拷贝到Projectlibsarmeabi目录中.第2行代码中的变量APP_MODULES表示Android工程需要调用的非托管模块,如果存在多个非托管模块,使用空格进行分隔。本示例调用的非托管模块为add-module,对应在后面涉及的Android.mk文件Application.mk的变量说明变量 强制使用 说明 APP_PROJECT_PATH 是Android工程所在的目录APP_MODULES 是Android工程需要调用的非托管模块APP_OPTIM 否指定优化等级,包含两个等级debug和release,release是缺省设置。debug生产非优化代码,更加易于调试APP_CFLAGS 否编译C代码时所传递的编译器标志APP_CXXFLAGS 否编译C+代码时所传递的编译器标志APP_CPPFLAGS 否编译C/C+代码时所传递的编译器标志d. 编译native代码 cd Projectndk-build三. Android framework中增加共享库Framework/base/core/jni 下面有我们framework中用到的jni nativie源文件myNativieFile.cpp,我们可以在这里面添加自己的nativie源文件,然后将其增加到android.mk中1. LOCAL_SRC_FILES:= ActivityManager.cpp AndroidRuntime.cpp myNativieFile.cpp2. LOCAL_C_INCLUDES +=$(MTK_P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论