Android NDK使用方法

Android NDK使用方法

ID:37917688

大小:107.50 KB

页数:13页

时间:2019-06-02

Android NDK使用方法_第1页
Android NDK使用方法_第2页
Android NDK使用方法_第3页
Android NDK使用方法_第4页
Android NDK使用方法_第5页
资源描述:

《Android NDK使用方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、AndroidNDK使用方法目前AndroidNDK只能编译出动态库.so文件,并不是能生成.apk文件,所以要调用底层的NDK程序必须分两个部分单独编写。本文档将按照开发人员编码顺序介绍如何使用NDK。本文使用的NDK版本为1.6r1版本,因为不想配置交叉编译环境直接使用了linux版本的NDK在linux机器上编译。 1.首先让NDK环境正确配置完成然后才可以添加自己的代码编译。下载Android1.6r1NDK、解压到某一目录并将环境变量ANDROID_NDK_ROOT设为你解压的NDK所在路径 比如我现在的NDK放在/home/once下名字为android-ndk那么就需要

2、用exportANDROID_NDK_ROOT=/home/once/android-ndk这条命令来设置环境变量2.运行./build/host-setup.sh更新系统工具链依赖 这点没什么好讲的如果第一步配置对了那么这一步NDK会根据你的配置生成对应的工具链3.建立你自己的工作目录在apps目录下3.1比如我的工程会放在/home/once/android-ndk/apps/下面3.2然后拷贝一个例子工程里的Application.mk到你的目录并修改里面的参数为你的工程对应的值APP_PROJECT_PATH:=$(callmy-dir)/projectAPP_MODULES

3、     :=testdecrypt //主要是这里要改成你工程的依赖关系我这里有2个互相依赖的模块就是一个库依赖于另一个库我这里的是decrypt依赖test库一般2个库的情形比较常见就是我们的ndk接口依赖一个标准c语言被交叉编译出来的库为了保持工具链一致当然最好的方法就是把你自己的c库源码放进来编译4.新建一个文件夹名为project这个文件夹将用来存放你的jni工程以及java工程 Java工程用eclipse辅助完成即可这里我们只讲JNI工程。我们创立一个jni文件夹在project下然后同样从例子工程的jni文件夹下面拷贝一个Android.mk文件过来将里面的参数改对如

4、下LOCAL_MODULE:=test//这个是你的库的名字LOCAL_SRC_FILES:=test.ctest.h//这个是你用来生成库的源码文件之所以会生成动态库是因为下面这句:include$(BUILD_SHARED_LIBRARY)-13-如果你的工程还需要依赖其他的模块就需要指定如下参数:LOCAL_SHARED_LIBRARIES:=Libtest这个libtest其实就是我们上面的module名字所以上面的Application.mk得写好依赖关系否则这个库编译的时候会找不到test库还有就是如果你想在你的NDK的c代码中打印androidlog那么你得再依赖一个

5、系统库:LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib–llog以上几个步骤全部做完了就可以进入第5点编译一下你的ndk库看看有没错误的了5.向上层目录进入到ndk的根目录,运行makeAPP=hello-jni(你的项目名称V=1打印详细-B强制重编)比如我这里的工程为email那么如果我要编译我的工程我就用这条命令makeAPP=email如果没有错误那么基本上说明你的c代码初步编译无误。6.用eclipse创建一个AndroidProject,这里不多做论述。完成这个工程之后将整个工程复制到$ANDROID_NDK_ROOT/apps/你的工程目录/pro

6、ject/下,然后进入ndk的根目录运行命令编译整个工程,这个时候ndk会帮你把jni下面的代码编译成库放到你的java工程下面对应的目录中去。这时候用eclipse导入这个android工程,你会发现你的android工程下的libs下面有了你需要平台命名的文件夹里面包含你需要的库。这时候可以直接用eclipse编译并生成apk文件安装到机器或者模拟器调试无误整个工程就初步完成了。 以上讲的都是简单的工程构建步骤在写NDK的时候还是有很多东西要注意的。NDK相比较JNI方式确实简化了很多步骤但是简化的步骤NDK帮你自动生成就需要你严格按照规则来做。比如你的NDK里面的函数名你必需严

7、格的按照Java_com。。。这样的名字命名com以及后面就是你的调用ndk的java类文件名最后一个短横线之后的为你的native函数名。如果这里写的不正确或者参数不正确整个库的引导就会报异常。TextView tv=newTextView(this);       tv.setText(stringFromJNI());//如果调用失败会抛出java.lang.UnsatisfiedLinkError异常       setContentView(tv

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。