• android NDK 安装与简单.so生成


    环境Ubuntu16.04

    1、NDK下载与安装

    下载:

    在NDK官网下载对应平台的版本,我下载的是android-ndk-r10e-linux-x86_64.zip 网址是https://developer.android.google.cn/ndk/downloads/older_releases?hl=zh-cn

    此处需注意的是,下载最新版本或者较高的版本的zip,解压后根目录下没有samples文件夹,后来下载了10e版本。

    安装:

    先unzip命令 解压下载的文件,解压后的文件夹为android-ndk-r10e

    设置系统环境:

    在~/.bashrc文件夹加入命令:

    NDKROOT=/home/xx/Downloads/android-ndk-r10e
    export PATH=$NDKROOT:$PATH

    保存退出后,执行 source ~/.bashrc

    在根目录下android-ndk-r10e执行ndk-build, 如果说缺少某个文件,则说明安装成功,如果说没有ndk-build则未成功安装

    还有另一种验证方式,就是验证samples中hello-jni.so能否顺利利用ndk-build生成。

    2、利用一个cpp、h文件生成.so文件

    准备文件:

    在根目录下新建jni文件夹

    查找并拷贝一个Application.mk到根目录;cd jni后,查找并拷贝一个Android.mk到jni文件夹,同时把需要编译的.cpp,.h文件拷贝到该文件夹中。

    该版本下Application.mk需要在Android.mk的上一级目录,才能在Application.mk所在目录中顺利执行ndk-build。

    修改:

    注释掉Android.mk中的这两行,

    #LOCAL_MODULE := hello-jni
    #LOCAL_SRC_FILES := hello-jni.c

    换成 LOCAL_MODULE := xx-jni

          LOCAL_SRC_FILES := xx.cpp

    添加要适用的android 平台:

    TARGET_ARCH := arm
    TARGET_PLATFORM := android-12

    在Application.mk中需要添加APP_MODULES,与Android.mk的LOCAL_MODULE相同,如下:

    APP_MODULES:=xx-jni

    并添加:APP_ABI := armeabi,armeabi-v7a(可以按实际需求增、减)

    此时在根目录下执行ndk-build,当然不可能顺利生成.so,会遇到问题:

    a、cpp文件中的iostream和vector等c++库报错,找不到相应头文件

    Application.mk中添加:

    APP_STL := gnustl_static

    APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1
    APP_CPPFLAGS := -fpermissive
    APP_CPPFLAGS += -std=gnu++11

    Android.mk中添加:

    LOCAL_CPPFLAGS += -std=c++11
    LOCAL_C_INCLUDES := /home/xx/Downloads/android-ndk-r10e/sources/cxx-stl/stlport/stlport
    LOCAL_C_INCLUDES += external/stlport/stlport
    LOCAL_C_INCLUDES += bionic
    LOCAL_C_INCLUDES += bionic/libstdc++/include

    b、cpp中所使用的random报错,找不到头文件(貌似是,不太记得问题了)

    Android.mk中添加:LOCAL_C_INCLUDES +=/home/xx/Downloads/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include

    Application.mk中添加:NDK_TOOLCHAIN_VERSION=4.8

    c、std::相关函数报错 undefined

    Android.mk中添加:LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

    然后顺利生成了.so文件。

  • 相关阅读:
    大熊君说说JS与设计模式之------中介者模式Mediator
    大熊君说说JS与设计模式之------命令模式Command
    读书笔记:《HTML5开发手册》--HTML5新的结构元素
    读书笔记:JavaScript DOM 编程艺术(第二版)
    记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL
    总结:Mac前端开发环境的搭建(配置)
    js学习笔记:操作iframe
    js学习笔记:webpack基础入门(一)
    js学习笔记:webpack基础入门(一)
    微信日志开发之人脸识别开发
  • 原文地址:https://www.cnblogs.com/xiaoheizi-12345/p/12531925.html
Copyright © 2020-2023  润新知