精华内容
下载资源
问答
  • 1、安装make build工具执行以下命令:sudo apt-get install build-essential2、下载NDK 选择Linux 32/64-bit (x86)版本,下载下载成功后,解压到/usr/lib/目录下3、配置Eclipse插件打开... Android -> NDK b) 右...

    1、安装make build工具

    执行以下命令:

    sudo apt-get install build-essential

    2、下载NDK

    0818b9ca8b590ca3270a3433284dd417.png

    选择Linux 32/64-bit (x86)版本,下载

    下载成功后,解压到/usr/lib/目录下

    3、配置Eclipse插件

    打开Eclipse,设置NDK路径,Window -> Preferences -> Android -> NDK

    0818b9ca8b590ca3270a3433284dd417.png

    b) 右键点击项目,Android Tools -> Add Native Support

    前提:Eclipse成功安装ADT

    4、调试

    a) 更新C/C++ Build配置

    右键点击项目,Properties -> C/C++ Build -> Builder Settings

    0818b9ca8b590ca3270a3433284dd417.png

    Builder Command,由"ndk-build"添加参数“NDK_DEBUG=1”

    In NDK r5, ndk-build has been modified to make it easier to switch between

    release and debug builds. This is done by using the NDK_DEBUG variable.

    For example:

    $NDK/ndk-build NDK_DEBUG=1 => forces the generation of debug binaries

    $NDK/ndk-build NDK_DEBUG=0 => forces the generation of release binaries

    If you don't specify NDK_DEBUG, ndk-build will keep its default behaviour,

    which is to inspect the AndroidManifest.xml, if any, and see if its

    element has android:debuggable="true".

    IMPORTANT: If you use the build tools of SDK r8 (or higher), you

    won't need to touch your AndroidManifest.xml file at all!

    That's because if you build a debug package (e.g. with

    "ant debug" or the corresponding option of the ADT plugin),

    the tool will automatically pick the native debug files

    generated with NDK_DEBUG=1.

    Also, as a convenience, the release and debug object files generated by the

    NDK are now stored in different directories (e.g. obj/local//objs and

    obj/local//objs-debug). This avoids having to recompile all your sources

    when you switch between these two modes (even when you only modified one or

    two source files).

    b) 右击项目,Debug As -> 3 Android Native Application

    展开全文
  • 1、首先下载 NDK官方NDK 选择以下的Linux版本 包有点大,等待下载完,然后解压,就能得到一个文件夹 将整一个文件夹 复制到你想存放的路径(记住该路径 后面会用到) 2、配置环境 sudo vim /etc/profile ...

    1、首先下载 NDK官方NDK

    选择以下的Linux版本

     

    包有点大,等待下载完,然后解压,就能得到一个文件夹

    将整一个文件夹 复制到你想存放的路径(记住该路径 后面会用到

    2、配置环境

    sudo vim /etc/profile

    在最后加上 两行

    export NDK_HOME=NDK的路径
    export PATH=$PATH:$NDK_HOME

    NDK的路径,就是前面提到的复制到存放的路径,全路径赋值过来

    然后保存退出

    然后同步一下

    source  /etc/profile
    

     至此,就可以使用 ndk-build  命令了

    # ndk-build -v
    
    GNU Make 4.3.90
    Built for x86_64-pc-linux-gnu
    Copyright (C) 1988-2020 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    

    能打印出版本号,就说明配置OK 了

    3、使用ndk-build 编译  .c  文件

    先来个 Hello  Word 吧

    必备文件Android.mk  xxx.c

    在任意一个目录下,创建一个Android.mk文件,并输入以下内容

    #author: Linlq
    #date: 2021.10.20
    #fileName ndkTestHello.c 
    
    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    LOCAL_MODULE    := ndk_test
    LOCAL_CFLAGS    := -D__USE_BY_ANDROID__
    LOCAL_SRC_FILES :=   ndkTestHello.c 
    LOCAL_LDFLAGS += -pie -fPIE
    LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -pthread -L./libs/armeabi
    include $(BUILD_EXECUTABLE)
    
    
    

    然后在同目录下 创建 ndkTestHello.c文件,记住 该文件名,应该要和Android.mk 的一致

    #include <sdtio.h>
    int main()
    {
        printf("NDK Hello Word \n");
    
        return 0;
    }

    然后,在当前目录下 进行执行以下命令

    ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk

    一会之后,就可以看到 编译的打印,在当前目录下也生成了  obj   libs   两个目录,所需要的文件,就在libs目录下, 根据平台按需 adb push 到安卓的板子中

    就可以看到打印“ NDK Hello  Word ” 了

     

    至此,NDK 环境配置以及编译demo 完毕

    如有交流 可 微信:NNN6786789 联系交流开发心得、经验

    参考链接: 在Ubuntu下配置NDK环境_爬行的菜鸟的博客-CSDN博客

    展开全文
  • Android NDK开发

    2021-06-03 01:30:04
    ##编译问题##1、eclipse编译错误,提示“clang++.exe: error: invalid linker name in argument '-fuse-ld=bfd'”解决:将Android.mk文件中的“LOCAL_LDFLAGS += -fuse-ld=bfd”修改为“LOCAL_LDFLAGS += -fuse-ld=...

    ##编译问题##

    1、eclipse编译错误,提示“clang++.exe: error: invalid linker name in argument '-fuse-ld=bfd'”

    解决:将Android.mk文件中的“LOCAL_LDFLAGS += -fuse-ld=bfd”修改为“LOCAL_LDFLAGS += -fuse-ld=bfd.exe”

    ##平台架构##

    Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7(从2010年起),x86(从2011年起),MIPS(从2012年起),ARMv8,MIPS64和x86_64(从2014年起),每一种都关联着一个相应的ABI。

    每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64。

    ##Android如何加载.so文件##

    不同CPU架构的Android手机加载时会在libs下找相对应的目录,并从对应的目录下寻找需要的.so文件;

    如果没有对应的目录,就会去armeabi或者armeabi-v7a下去寻找,兼容运行;

    如果有对应的目录,但是没有找到对应的.so文件,也不会去armeabi下去寻找,直接报错。

    ##平台的兼容##

    armeabi架构

    armeabi-v7a架构

    v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是v7a,所以为了性能上的更优,不要为了兼容放到armeabi文件夹下

    x86架构

    x86可以兼容armeabi平台运行(无论是armeabi-v7a还是armeabi),同时带来的是性能上的损耗。另外需要指出,打包出的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。

    所有的x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi架构的.so文件,因此似乎移除其他ABIs的.so文件是一个减少APK大小的好技巧。但事实上并不是:这不只影响到函数库的性能和兼容性。 x86设备能够很好的运行ARM类型函数库,但并不保证100%不发生crash,特别是对旧设备。 64位设备(arm64-v8a,x86_64,mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART,webview,media等等)。

    ##上传指定ABI版本的APK##

    以减少APK包大小为由是一个错误的借口,因为你也可以选择在应用市场上传指定ABI版本的APK,生成不同ABI版本的APK可以在build.gradle中如下配置。

    android {

    ...

    splits {

    abi {

    enable true

    reset()

    include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for

    universalApk true //generate an additional APK that contains all the ABIs

    }

    }

    // map for the version code

    project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9]

    android.applicationVariants.all { variant ->

    // assign different version code for each output

    variant.outputs.each { output ->

    output.versionCodeOverride =

    project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode

    }

    }

    }

    ##参考##

    Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    http://blog.csdn.net/ouyang_peng/article/details/51168072

    Android项目针对libs(armeabi,armeabi-v7a,x86)进行平台兼容

    http://blog.csdn.net/u011688880/article/details/46984547

    Androidndk开发打包时我们应该如何注意平台的兼容(x86,arm,arm-v7a)

    http://www.it165.net/embed/html/201410/2707.html

    展开全文
  • 1 C/C++库的本质 是编译好的C/C++的二进制代码,可以直接被CPU执行,加上头文件就可以供开发者使用... Android ios 静态库 .lib .a .a .a 动态库 .dll .so .so .dylib/.tbd 3...

    1  C/C++库的本质

            是编译好的C/C++的二进制代码,可以直接被CPU执行,加上头文件就可以供开发者使用。

    2  C/C++库分类

            根据是否打入到依赖它的目标程序中,分为静态库和动态库。在不同操作系统上,C/C++库的后缀名如下:

    windowslinuxAndroidios
    静态库.lib.a.a.a
    动态库.dll.so.so.dylib/.tbd

    3  动态库与静态库区别

    (1)使用上的区别:
            静态库在编译时被链接并被打到目标程序中,由于已经在目标程序中,目标程序运行时直接在内存中使用;同一个静态库被多个程序调用时会被重复加载多次。
            动态库在运行时被链接并加载到内存中供目标程序使用,并不会打到目标程序中;同一个动态库被多个程序调用时,只加载一次。

    (2)生成上的区别:
            生成静态库时只有编译过程,没有链接过程,所以当静态库依赖其他静态库或者动态库时不需要指定它需要链接的静态库或动态库,指定也没啥用;但使用该静态库时,使用方需要链接该静态库依赖的静态库或动态库,因为在可执行文件或动态库链接静态库的时候,它会去扫描该静态库中哪些未解析符号,然后会在可执行文件或动态库链接的其它静态库或动态库中去扫描看是否有此未解析的符号,如果有,则链接到此对应的定义,没有则报错。例如可执行文件z需要链接静态库a,而静态库a需要链接静态库b,那么如果可执行文件z要使用静态库a,z需要同时链接静态库a和静态库b,静态库a无需链接静态库b,实例验证请看这位同学的博客https://blog.csdn.net/tom06/article/details/80309864
            生成动态库时既有编译过程又有链接过程,所以直接在动态库中指定需要链接的静态库或者动态库即可,当动态库链接静态库时,会把静态库复制一份打到动态库里,当动态库依赖动态库时,会根据指定路径查找,并不会将动态库代码打到动态库中,而是运行时才将依赖的动态库读入内存。

    4  动态库与静态库优缺点

            静态库
                    优点:
                    (1)速度比动态库略快。
                    (2)程序安装到同架构的其他设备上方便。
                    缺点:
                    (1)程序体积大:静态库打进目标程序,导致程序体积大;
                    (2)浪费内存:多个使用同一个静态库的程序同时运行时,多个相同静态库的副本会重
                            复加载到内存中,浪费内存。
                    (3)更新麻烦:更新库时,需要重新编译整个程序。
            动态库
                    优点:

                    (1)程序体积小:动态库在程序运行时动态链接载入内存,库文件不打进目标程序,二
                            者序相互独立,因此程序体积较小;
                    (2)节省内存:多个使用同一个动态库的程序同时运行时,只需要加载一个动态库到内
                            存,节省内存。
                    (3)更新方便:更新库时,不需要重新编译整个程序,只需要更新库文件。
                    缺点:
                    (1)速度比静态库略慢
                    (2)程序安装到同架构的其他设备上略麻烦,需要先把动态库移植过去,然后再安装程
                            序,保证程序运行时不会出错。

    5  C/C++库编译

    (1)C/C++文件的编译流程如下:

            预处理:读取c源程序,对其中的伪指令(以# 开头的指令)和特殊符号进行处理。
            编译:通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成汇编代码,并优化;其中优化主要包括去冗余、合理使用硬件资源等。
            汇编:把汇编语言代码翻译成目标机器指令,每一个C语言源文件,都将最终经过这一处理而得到相应的目标文件。
            链接:将目标文件和库文件生成可执行程序或者动态库。由汇编程序生成的目标文件并不能立即就被执行,可能引用了其他库的符号函数等等,这就需要链接这个库,链接包括静态链接和动态链接,链接的库是静态库就是静态链接,链接的库是动态库就是动态链接;静态链接是将静态库复制一份到最终的可执行文件中,动态链接只在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息,在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。
            归档:将目标文件打包成静态库,静态库实际上就是目标文件的集合,没有链接过程。

    (2)将C/C++代码编译成库,需要编译器、标准库及第三方库。不同的操作系统都有自己的编译器及相应的标准库,目前常用编译器如下:

    编译器标准库
    Linux系统gcc/g++libstdc++(gnustl)

    Android/MAC OS 系统

    clang/clang++配合llvmlibc++
    Windowscl.exeSTL

            其中C++标准库是包含C标准库的,不同平台用自己的编译器及标准库是最好的,也可以不用自己的,但可能会出现很多兼容问题。Android平台NDK r18开始弃用了gcc转而全面支持clang。windows的C/C++编译基本集成在VS开发环境中,很少单独使用。
            另外编译器也可以跨平台使用,相关知识请看这位同学的文章https://www.cnblogs.com/sarahsuper/p/13323120.html

    6  几点注意

            (1)库中不包括头文件,只有源文件的二进制形式,使用时需要将头文件和库文件配套使用

    展开全文
  • Android NDK 开发

    2021-09-03 19:36:39
    Android NDK 开发 Android NDK 简介 NDK 全称 Native Development Kit 本地语言(C/C++)开发包。而对应的Android开发中使用的是 Android-SDK,(Software Development Kit)软件开发包(只支持Java语言开发)。我们...
  • android ndk开发的两种方式(ndk-build和CMake) CMake是常见的一种开发方式。 谷歌也推崇这种方式。 具体可访问: https://developer.android.google.cn/ndk/samples/sample_hellojni 去GitHub上 下载这块示例...
  • JNI(Java Native Interface, Java本地化方法)使得Java能与其它...Android NDK(Android Native Development Kit)是一系列的开发工具,使用JNI编程,可以提高程序的执行效率,更方便地使用现存的开源库。至于配置NDK...
  • AndroidStudio NDK开发最佳入门实践网上一些介绍AndroidStudio NDK入门的教程,感觉都不是很完整和全面,也没有告诉初学AndroidStudio NDK的同学们一些需要注意的地方。网上的方法大多需要使用javah命令,使用本文的...
  • android NDK开发解析

    2021-04-13 22:45:30
    android开发中如果需要用到c/c++...我把ndk开发分为三部分 1. java层代码 2. c/c++代码 3. 将c/c++代码打包为so包(CMake或者ndk-build) 个人理解是java通过so包和so包里面的c/c++代码交互 ** 一.java层代码 ** pub
  • NDK对于Android开发人员走向高手是不可缺少的利器,如果你说搞Android开发很NB,但连NDK都不会,别人会不以为然的,另外会搞NDK也会给你面试加分,再者以后Android平台上的3D游戏会比较流行,到了那个时候,相信...
  • 需要实现一个 NDK 层的网络请求。为了多端适用,还是选择了 CodeTyphon 作为跨平台方案。CodeTyphon 自带的fcl-web库可以直接完成对于 HTTP 请求的支持,虽然我很想这么说... 在实际使用中,的确可以通过引入fcl-web...
  • http://blog.csdn.net/qqxinxi/article/details/6558429文件操作其实和上层没什么关系,主要是通过C来完成文件的基本操作。...import.app.Activity;import android.os.Bundle;import android.view.View;imp...
  • 1. 下载自己特定版本的NDK: ... Android NDK: Please define the NDK_PROJECT_PATH variable to point to it. ******\build/core/build-local.mk:143: *** Android NDK: Aborting . Stop. 则环境搭建成功。
  • 通常Android系统中的应用都是用Java语言开发的,...本文就来讲讲怎样在Windows系统下配置NDK开发环境。这里假设大家已经安装好了Android的开发环境,包括jdk、android sdk以及eclipse。步骤一:下载并安装NDK首先,...
  • 本文使用FMOD来实现变声效果,直接使用《Android ndk开发:fmod语音学习(一)》这篇文章建立的FMOD的Android示例上添加变声效果。上图就是项目的界面,可以看到,本节要实现的变声效果,包括大叔、萝莉等等。接下来...
  • 我学习NDK的时候,已经不再需要安装cygwin及gcc,make等编译工具,NDK包已经为你准备好一切 :-)第一步 下载 NDK登录 http://developer.android.com/tools/sdk/ndk/index.html页面,下载你需要的NDK 开发包。...
  • Android NDK开发调试

    2021-06-06 13:35:39
    ndk-stack工具让您可以在堆叠追踪出现在adb logcat的输出中时过滤它们。 它还可以从源代码将共享库中的任意地址替换为对应的:值,从而更容易找出问题所在。例如,它可将下面的内容:I/DEBUG ( 31): *** *** *** *** ...
  • There are three step in totalstep one:add "LOCAL_LDLIBS := -llog " to your android.mk filelike:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_LDLIBS := -llogLOCAL_MODULE := hellologLOCAL_S...
  • Android开发中,程序Crash分三种情况:未捕获的异常、ANR(Application Not Responding)和闪退(NDK引发错误)。其中未捕获的异常根据logcat打印的堆栈信息很容易定位错误。ANR错误也好查,Android规定,应用与用户...
  • 进入Android Studio下载的SDK,SDK包含了Android开发的所有套件以及依赖,包含了C++, Java等以来都在这里。 下载完成了Android SDK后,Android中的adb一些组件加入操作系统的环境变量,这样的目的是我们可以在...
  • Android Studio下NDK开发流程Android Studio目前最新的版本是2.3稳定版,从2.2开始就默认使用CMake的方式来构建NDK项目,当然我们也可以使用ndk-build的方式,这里我们主要介绍CMake的方式。我们先介绍NDK的下载与...
  • Android NDK 开发中,排查问题遇到的最熟悉的关键字非 backtrace 莫属,Linux 系统中进程 crash 后通过 backtrace 输出堆栈信息,开发者就是基于这些堆栈信息来定位代码问题。当然定位 Native 层代码问题最优的...
  • 本篇主要介绍在Android Studio中通过JNI完成NDK开发,后一篇文章会介绍通过CMake方式在Android Studio 中进行NDK开发,敬请期待。源码地址:Step1:新建项目,命名为NDKDemo001 Step2:一路点击“Next”,最终点击...
  • 在做NDK开发的时候,我们只需要编译C/C++代码,有没有可能使用更快速的IDE环境,比如VC6来实现开发Android NDK开发呢,经过尝试,发现是可以实现的。下面就把步骤整理出来,以飨有相同兴趣的朋友。...
  • Android NDK开发基础

    2021-06-05 16:21:36
    Native Development Kit下载NDK开发包选择NDK r10eandroid-ndk-r10e-windows-x86_64.exe自解压文件大小400M,解压后3G+。配置NDK环境变量 将ndk目录添加到系统环境变量path,然后在新打开的cmd输入ndk-build验证: ...
  • 一来,是我再次复习的材料。二来,网上有些地方说的不是很详细,我也是参考了好多资料,弄了半天...作为一个2年的android攻城狮,今天才开始学习NDK开发,太晚了。。毕竟是现用现学。学完还是写个博客记下来比较好...
  • Android NDK 开发流程

    2021-06-04 12:28:53
    [TOC]一、下载并配置NDK二、创建 Android 项目,进行NDK配置1、配置好NDK路径之后记得在工程目录的local.properties文件中进行关联,注意要配置自己NDK的路径2、如果建立的是普通的 Android 项目,可按照文章内容...
  • 简介:AndroidNDK是能使Android应用开发者把从c/c++编译而来的本地代码嵌入到应用包中的一系列工具的组合。注意:AndroidNDK只能用于Android1.5及以上版本中。I. Android NDK 目标:Android虚拟机允许你的应用在源码中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,612
精华内容 22,244
关键字:

androidndk开发