`
h416756139
  • 浏览: 365720 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android NDK使用常见错误

阅读更多

Andorid NDK使用简要的流程【来源于Android NDK文档中的 OVERVIEW.txt】

Here’s a very rough overview of how you can develop native code with the Android NDK:

1/ Run   build/host-setup.sh to configure the NDK
2/ Place  your native sources under $PROJECT/jni/…
3/ Write  $PROJECT/jni/Android.mk  to describe your sources to the NDK build system
4/ Write  apps/<myapp>/Application.mk to describe your application and the native sources it needs to the NDK build system
5/ Build  your native code by running “make APP=<myapp> ” in the top-level NDK directory.

The last step will copy, in case of success, the stripped shared libraries your application needs to your application’s root project directory. You will then need to generate your final .apk through the usual means.

按照上述步骤,我们说明在每一步中可能存在的错误【第一步,我们就不在这里详细说了,网上有很多不错的文章】。

常见错误说明:

1、make:*** No rule specified and no make file found. Stop.

1
错误的原因估计是(cat : Linux命令,显示文件的内容):工程名与Aplication.mk中的APP_MOUDLES不一致。

2

2、make: *** No rule to make target  “XXXXXX”, needed by “ndk-app-XXXXX”. Stop.

3

这个错误的主要原因是:编译C文件为最后的so库文件需要2个文件:Application.mk、Android.mk,如下图所示:

4

MK文件如何设置,看了上面的图一目了然【详细的说明还是要去看文档】,以下几点需要注意:

  • 文件的相对路径是否正确(Application.mk中的APP_PROJECT_PATH设置相对路径),如下图所示:5
    这些在Android NDKzhong 都有“严格”规范的,在android-ndk的文档中都有详细说明。
  • 工程文件名、Aplication.mk中的APP_MOUDLES、Android.m中的LOCAL_SRC_FILES是否完全一致。Android.m中的LOCAL_SRC_FILES是输出库文件的名称【NDK会默认的加上前缀lib(如果LOCAL_SRC_FILES中已经是以lib开头就不添加),以及后缀.so】,但是尝试后发现这个地方必须与Aplication.mk中的APP_MOUDLES一致,否则就会导致上述错误。

3、make: ***[XXXX]Errror  1

6

这个错误只要大家仔细看下就明白是C 的编译错误,C 代码无法编译。

如何编写C文件【native file】中的函数说明?从Java Source File推导出C/C++ Native File,可以参考以下4步:

1)        编译java文件【Java sources:包含我们需要的native函数】,如下图所示:

7

2)        使用命令javac JNITest.jva && javah JNITest,命令运行后增加了2个文件:

8

JNITest.jva编译后的文件JNITest.class、JNITest.h,这个文件就是我们需要的头文件,如下图所示:

9

3)        修改函数名,如何修改?我们先分析Android-NDK中的例子程序:

10

从上面的例子发现,函数名分为4部分:13

按照上面的规则修改就可以了。

4)        将上面的函数声明拷贝出来,在jni文件中创建一个*.c文件,按照上述函数结构实现函数,如下图所示:

11

这样我们就从Java Source File一步一步的得到C/C++ Native File

4、程序运行时崩溃,这个时候我们需要注意以下几个问题:

库文件的加载

12

编译后的so文件是libJNITest.so,而实际加载的库文件名是: JNITest【这实际上是Unix的“规范”,在Android NDK的文档OVERVIEW.txt中有详细说明】;还有Linux系统区分大小写的,所以如果上面的代码中,将加载的库文件名写成jnitest,也会导致运行崩溃。转自:http://www.moandroid.com/?p=1848

分享到:
评论

相关推荐

    Android NDK开发Crash错误定位

    本地代码的常见错误包括内存地址访问错误、野指针使用、内存泄露、堆栈溢出、初始化错误、类型转换错误和除零错误等。这些错误往往不会提供明确的异常提示,只是简单地导致程序崩溃。 要定位NDK引发的崩溃问题,...

    Android NDK使用Iconv进行编码转换

    Android NDK(Native Development Kit)提供了一种方法来实现这样的编码转换,这就是使用Iconv库。Iconv是一个广泛使用的字符集转换工具,它允许在多种字符编码之间进行转换,包括Unicode、GBK和UTF-8。 Iconv在C/...

    android-ndk-r17c-windows-x86_64.zip

    Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用程序工具集,它允许开发者使用C和C++等低级语言编写部分应用,以提高性能或利用特定硬件功能。"android-ndk-r17c-...

    android_NDK.rar_NDK_android_android ndk_linux android

    - **性能分析**:使用Android Profiler和NDK提供的工具,如`ndk-stack`,可以对本地代码进行性能分析和错误排查。 5. **最佳实践** - **最小化本地代码**:只在必要时使用NDK,因为本地代码更难调试且不支持动态...

    android ndk r12b windows x86_64

    1. **编译错误**:确保NDK版本与使用的API Level兼容,检查JNI接口定义是否正确。 2. **性能瓶颈**:利用NDK自带的性能分析工具,如systrace,来查找瓶颈所在。 3. **跨平台兼容性**:虽然NDK支持多平台编译,但在...

    iperf2 iperf3 Android平台 ndk编译指南,常见问题解决方法

    iperf 2 ,3 的android 平台移植笔记,ndk 选择,交叉编译工具链的编译和配置,编译结果的验证,常见错误的处理方法。工作实践中的总结。

    android-ndk-r8-windows

    5. **配置 Android Studio**:如果使用 Android Studio 开发应用,则需在项目级别的 `build.gradle` 文件中指定 NDK 版本。 #### 四、开发实践 在实际开发过程中,使用 Android NDK r8 需要注意以下几个方面: 1....

    JNI的全部中英文资料,包括Android NDK mk说明的中文翻译

    综合这些资料,开发者不仅可以学习到JNI的基本概念和使用方式,还能深入理解Android NDK的构建过程,从而在Android开发中灵活运用原生代码,提高应用程序的性能和效率。同时,由于资料全面,对于遇到的大多数JNI相关...

    bugsnag-android-ndk,从原生Android C/C 代码中处理错误.zip

    在移动应用开发中,尤其是在Android平台,原生C/C++代码的使用是常见且必要的,因为它们能提供更高的性能和更低级别的硬件访问权限。然而,这种编程方式也带来了一项挑战:错误处理。"bugsnag-android-ndk"项目就是...

    ndk_r7_windows使用入门

    对于Android开发者而言,掌握如何使用Android NDK进行开发是一项非常重要的技能。本文将详细介绍如何使用Android NDK r7版本在Windows环境下进行本地C文件的编译,解决在编译过程中可能出现的各种问题。 #### 二、...

    Android NDK Beginner’s Guide第七章源码

    Android NDK(Native Development Kit)是Android平台提供的一套工具,允许开发者使用C/C++编写原生代码,从而提高应用程序的性能,尤其是对于需要进行大量计算或者图形处理的场景。本章节的源码深入探讨了NDK在实际...

    android_NDK_r9_使用方法.docx

    ### Android NDK r9 使用方法详解 #### 一、Android NDK 概述 - **定义**:Android NDK(Native Development Kit)是Android官方提供的一个工具包,它允许开发者利用C/C++来编写Android应用的部分组件。对于那些...

    Android Studio Ndk Demo

    3. **Android.mk** 或 **build.gradle**:旧版NDK项目可能会使用Android.mk进行构建配置,而在Android Studio中,现在更常见的是在build.gradle文件里配置NDK支持。 4. **Java代码**:通常会有一个Java类,比如`...

    使用AndroidStudio编译NDK的方法及错误解决方案.docx

    通过本文的介绍,您可以了解到如何在Android Studio中设置和配置NDK,并掌握解决常见错误的方法。遵循上述步骤和注意事项,您将能够更加高效地使用NDK进行开发。如果遇到其他未提及的问题,建议查阅相关文档或社区...

    图片灰度化示例(android ndk)

    NDK允许开发者在Android应用中使用原生代码,提高性能,特别是在处理图像这类计算密集型任务时。 首先,我们需要了解灰度化的基本概念。灰度图像,也称为单色图像,是由不同灰度级别的像素组成的。将彩色图像转换为...

    Android中的NDK开发

    在Android开发领域,NDK(Native Development Kit)是一种重要的工具,它允许开发者使用C和C++等原生代码来编写部分应用,以实现高性能计算、底层硬件交互或利用已有的C/C++库。本篇文章将深入探讨在Android NDK环境...

    android__NDK.rar_android

    通过阅读“android__NDK.docx”文档,初学者可以深入理解NDK的基本用法、示例代码和常见问题。这份文档应该会涵盖从NDK环境搭建到实际开发的全过程,对于拓宽Android开发者的知识面非常有帮助。在实际操作中,结合...

    NDK相关书籍

    NDK(Native Development Kit)是Android平台开发中的一个重要工具集,它允许开发者使用C和C++语言编写部分应用代码,以实现高性能、低级别的硬件访问以及游戏引擎等复杂功能。 首先,我们来看《Pro Android C++ ...

Global site tag (gtag.js) - Google Analytics