• 为Android添加JNI支持


    起因

    今天在进行Android原生开发时,需要通过JNI调用C++代码实现一些处理。以前没有做过类似的东西,在网上找了很久才解决问题,特记录下来以便以后翻阅。

    Eclipse无cygwin编译so的方法

    在网上找了下这方面的资料,总体来说还是比较多而且全的,这里就简单的列一下这方面的步骤吧。只是需要注意的是,只有NDK-7之后的版本才支持不用cygwin来交叉编译,下载的时候需要注意这一点。

    Java开发环境

    Java开发环境主要是安装JDK,JRE之类的东西,然后下载下Eclipse版本,可以考虑google官方推荐的Eclipse开发版本。然后需要设置一系列的环境变量,这里就不累述了,。

    下载NDK

    NDK的版本按照自己的需要下载即可,我这里使用的是NDK-r8e.

    下载地址: http://developer.android.com/sdk/ndk/index.html

    下载后直接解压缩安装即可。

    环境搭建

    1.打开Eclipse,新建一个Android工程(我取名为TestNDK),在工程目录TestNDK下新建JNI文件夹,该文件夹就是用来保存NDK需要编译的文件代码等。
    2.新建并配置一个Builder
    2-1.Project->Properties->Builders->New,新建一个Builder
    2-2.在弹出的[Choose configuration type]对话框,选择[Program],点击[OK]
    2-3.在弹出的[Edit Configuration]对话框中,配置选项卡[Main]
    在"Name"中输入新Builder的名字(名字任意)
    在"Location"中输入ndk_build.cmd的绝对路径(建议路径不要有中文和空格),根据各自的ndk路径设置,也可以通过"Browser File System..."来选取这个路径
    在"Working Diretctory"中输入TestNDK的位置,也可以通过点击"Browser Workspace"来选取TestNDK的目录
    设置后的效果图

    2-3.在[Edit Configuration]对话框中,配置选项卡[Refresh]
    勾选"Refresh resources upon completion"
    勾选"The entire workspace"
    勾选"Recuresively include sub-folders"

    点击"SPecify Resources..."勾选TestNDK工程中新建的JNI目录,点击"finish"。点击"OK",配置完成


    按照以上步骤完成后,整个编译环境已经成功搭建完毕!!!

    设置步骤

    按照以上的环境搭建步骤,可以支持编译C语言的文件,但是不支持编译C++。如果需要支持C++甚至C11还需要进行一些内容修改工作
    1.添加makefile文件
    Android编译so文件时需要用到两个文件,分别是:Application.mk和Android.mk。这两个文件的用途可以直接问谷歌。
    2.修改Application.mk文件
    添加对STL库版本使用的声明,添加编译开关

    APP_STL := gnustl_static 
    APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
    

    3.修改Android.mk文件
    添加对libstdc++.a库的链接

    LOCAL_LDFLAGS = $(LOCAL_PATH)/libs/libstdc++.a 
    LOCAL_CPPFLAGS += -lstdc++ -fexceptions 
    

    设置完毕以后,即可享受JNI之旅了

  • 相关阅读:
    $Noip2018/Luogu5022$ 旅行
    $Noip2018/Luogu5020$ 货币系统 $dp$
    $Noip2018/Luogu5021$ 赛道修建 二分+树形
    $Noip2018/Luogu5019/Luogu1969$ 铺设道路
    $Poj1220/AcWing124 Number Base Convertion$ 进制转换+高精除
    $Poj1050 To the Max$
    $Poj1723/AcWing123 Soldiers$ 排序
    luogu质数距离
    模板线性筛
    CERC2016 bfs 最大生瓶颈边 lca
  • 原文地址:https://www.cnblogs.com/sanghg/p/4074546.html
Copyright © 2020-2023  润新知