Android下Native的so编译:使用ndk-build.cmd/.sh
最近将一个DLL库移植至安卓下,编译出so文件。
经历makefile、cmake等等的入门到放弃.....
最后还是使用android的ndk编译命令来解决
每个NDK文件下,均包含的是所有工具链、头文件、库文件等
执行ndk-build命令,诸如:D:\10.AndroidSDK\ndk\android-ndk-r15b\ndk-build.cmd,则是使用R15版本的NDK编译
ndk-build编译时,会在指定工作目录下查找jni/Android.mk及jni/Application.mk,这两个文件也是标准makefile
Application.mk中定义一个APP下所有的选项,诸如编译几个ABI、编译时使用什么STL
示例:
# 不写 APP_ABI 会生成全部支持的平台,目前支持:armeabi arm64-v8a armeabi-v7a
# APP_ABI := armeabi arm64-v8a armeabi-v7a mips mips64 x86 x86_64
# APP_ABI := all
APP_ABI := arm64-v8a
APP_STL := c++_static
Android.mk则定义一个或多个模块的编译,限定了相应宏来确定模块名、相应源代码文件
示例:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 要生成的.so库名称。java代码System.loadLibrary("hello");加载的就是它
LOCAL_MODULE := XXXXXX
# C++文件
LOCAL_SRC_FILES := ../src/XXX/AAA.cpp \
../src/XXX/BBB.cpp \
../src/XXX/base64/CBase64.cpp \
../src/XXX/BB/FF.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../inc $(LOCAL_PATH)/../src/XXX
LOCAL_CFLAGS := -DXXX_EXPORT
LOCAL_LDLIBS := -luvc -lusb100 -ljpeg-turbo1500
LOCAL_LDFLAGS := -L$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI) -lm -llog
# LOCAL_LDFLAGS := -L$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI)-luvc -lusb100 -ljpeg-turbo1500 -lm -llog
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE指定的是模块名
LOCAL_SRC_FILES指定相应的源代码文件 其中Android.mk中使用的宏名TARGET_ARCH_ABI,即Application.mk下面APP_ABI的当前项ABI
include $(BUILD_SHARED_LIBRARY)表示编译的是一个共享库 如果想编译多个模块,则应该在include $(BUILD_SHARED_LIBRARY)后面,使用include $(CLEAR_VARS)清除变量,
增加更多模块。
Android下Native的so编译:使用ndk-build.cmd/.sh的更多相关文章
- Android下Native的so编译:使用cmakelists.txt
android studio的CMakeLists.txt写好后,在Studio中编译没问题,在命令编译时则需要配置很多参数才能成功 示例CMakeLists.txt文件: cmake_minimum ...
- 在Android下运行Linux平台编译的程序
编译时需注意使用 -static 编译选项: 否则会提示运行:/system/bin/sh: ./i2c: No such file or directory
- NDK下 将Platinum SDK 编译成so库 (android - upnp)
Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...
- 【转】Android下编译jni库的二种方法(含示例)
原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...
- 【转】Android下编译jni库的二种方法(含示例) -- 不错
原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...
- Android -- Android下的NDK开发(一)
1,NDK是什么?为什么要进行NDK开发? NDK:Native Development Kit.Android应用运行在Dalvik虚拟机中.NDK允许开发人员使用本地代码语言(例如C和C++)实现 ...
- Android下NDK开发环境搭建
Android下NDK开发环境搭建 1. AndroidNDK安装与配置 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...
- NDK环境搭建(Native Code的编译,不需要Cygwin)
分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...
随机推荐
- pause模块
pause模块:暂停脚本执行 # ansible-doc -s pause- name: Pause playbook execution pause: minutes: // 暂停的真实分钟数 pr ...
- 一、json数组的键和值
一.json数组的键和值 https://blog.csdn.net/sinat_30224769/article/details/51702203 string test_json = " ...
- KVM虚拟化网卡管理
brctl常用命令 查看当前虚拟网桥状态 brctl show 添加一个网桥 addbr 删除一个网桥 delbr 添加网口 addif 删除网口 delif VALN LAN 表示 Local Ar ...
- Atcoder Regular 098 区间Pre=Xor Q询问区间连续K去最小值最小极差
C 用scanf("%s")就会WA..不知道为什么 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset ...
- Spring加载资源文件的方式
UrlResource 封装了java.net.URL,它能够被用来访问任何通过URL可以获得的对象,例如:文件.HTTP对象.FTP对象等.所有的URL都有个标准的 String表示,这些标准前缀可 ...
- NJU 操作系统实验三
实验描述: 代码实现: 链接:https://pan.baidu.com/s/1so3-XsvWBY9ZDbINob6qCw 提取码:8hhe
- python修炼之路——控制语句
Python编程之print python2.x和python3.x的print函数区别:python3.x的print函数需要加括号(),python2.x可以不加. #-*- coding:utf ...
- 风控MIS那些事
信贷风险管理应基于数据进行决策,MIS则是通过对数据的加工与展示,给决策者提供参考. 管理信息系统(ManagementInformation System,MIS)是进行信息的 收集.传输.加工.储 ...
- ERROR 1040 (08004): Too many connections
ERROR 1040 (08004): Too many connections 长期一来,mysql低版本中,当面对连接数陡增而出现too many connections时,往往比较棘手.今天特意 ...
- U盘安装linux(CentOS Kali ubuntu)无法挂载_实测
最新的Kali linux官方下载地址: https://www.kali.org/downloads/ 刻录软件官网:http://rufus.ie/ 1.打开. 2.插入U盘. 3.自动下载插件. ...