最近将一个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的更多相关文章

  1. Android下Native的so编译:使用cmakelists.txt

    android studio的CMakeLists.txt写好后,在Studio中编译没问题,在命令编译时则需要配置很多参数才能成功 示例CMakeLists.txt文件: cmake_minimum ...

  2. 在Android下运行Linux平台编译的程序

    编译时需注意使用 -static 编译选项: 否则会提示运行:/system/bin/sh: ./i2c: No such file or directory

  3. NDK下 将Platinum SDK 编译成so库 (android - upnp)

    Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...

  4. 【转】Android下编译jni库的二种方法(含示例)

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

  5. 【转】Android下编译jni库的二种方法(含示例) -- 不错

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

  6. Android -- Android下的NDK开发(一)

    1,NDK是什么?为什么要进行NDK开发? NDK:Native Development Kit.Android应用运行在Dalvik虚拟机中.NDK允许开发人员使用本地代码语言(例如C和C++)实现 ...

  7. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

  8. NDK环境搭建(Native Code的编译,不需要Cygwin)

    分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...

  9. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...

随机推荐

  1. Delphi 循环语句和程序的循环结构

  2. last, lastb - 显示最近登录的用户列表

    总览 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...] lastb [-R] [-num] [ -n num ] ...

  3. windows 快捷键相关命令

    Mstsc  远程链接 Taskmgr 任务管理器 Regedit  打开注册表 Netstat -ano | find  “80” 查找内容 tasklist /fi "pid eq 57 ...

  4. java面试(集合类)03

    1.Collection 和 Collections 有什么区别? Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如 List.Set 等 ...

  5. CF 1272F Two Bracket Sequences (括号dp)

    题目地址 洛谷CF1272F Solution 首先题目中有两个括号串 \(s\) 和 \(t\) ,考虑先设计两维表示 \(s\) 匹配到的位置和 \(t\) 匹配到的位置. 接着根据 括号dp的一 ...

  6. web.xml中url-pattern中/和/*的区别(来自网络)

    其中/和/*的区别: < url-pattern > / </ url-pattern >   不会匹配到*.jsp,即:*.jsp不会进入spring的 Dispatcher ...

  7. java课堂作业3 第一题 能查阅申请对象个数

    实验代码 public class Num { public static void main(String[] args) { // TODO Auto-generated method stub ...

  8. pyqt5-动画组QAnimationGroup

    from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QLabel import sys from PyQt5.QtCore im ...

  9. 015:URLs分层模块化

    URLs分层模块化: 经过上面的14节课程,大伙有没有发现一个问题:那就是随着的项目功能模块越来越多,所有url匹配都写在一个urls.py文件中,其结果是:文件长,看着心累——需要分门别类:因此能不 ...

  10. PWM 定义

    简单的说,比如你有5V电源,要控制一台灯的亮度,有一个传统办法,就是串联一个可调电阻,改变电阻,灯的亮度就会改变.还有一个办法,就是PWM调节.不用串联电阻,而是串联一个开关.假设在1秒内,有0.5秒 ...