关闭

Android笔记---开发 NDK 编译和使用静态库、动态库

标签: AndroidNDK静态库动态库
1181人阅读 评论(0) 收藏 举报
分类:
本文转载自:http://blog.csdn.net/heng615975867/article/details/11904737
  1. 在eclipse工程目录下建立一个jni的文件夹。
  2. 在jni文件夹中建立Android.mk和Application.mk文件。

Android.mk文件:

Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。详见附件中的Android.mk。

 

Application.mk文件:

定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库)、APP_PLATFORM := android-9(使用android-9以上的平台库)。

  1. 用cd命令移至jni目录,运行/mnt/500G/public/NDK/android-ndk-r7b/ndk-build命令,这时命令行中可能会出现编译错误,比如头文件找不到,函数找不到等等,细心找找就能改掉。
  2. 编译成功后,在工程目录下libs/x86中就会生成你想要的.so库。

NDK 编译和使用静态库、动态库

情况一:编译静态库

情况二:编译动态库

情况三:编译动态库+静态库

情况四:已有第三方静态库(动态库),编译静态库(动态库)


默认所有代码和文件在$project/jni下,否则特殊说明。

情况一:编译静态库

文件Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_STATIC_LIBRARY)


文件Application.mk:

APP_MODULES :=hello-jni


情况二:编译动态库

文件Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)

情况三:编译动态库+静态库

文件Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := mylib_static
LOCAL_SRC_FILES := src.c
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := mylib_shared
LOCAL_SRC_FILES := src2.c

LOCAL_STATIC_LIBRARIES := mylib_static

include $(BUILD_SHARED_LIBRARY)

情况四:已有第三方静态库(动态库),编译静态库(动态库)

文件Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := thirdlib1      # name it whatever
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libthird1.a     # or $(so_path)/libthird1.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)    #or PREBUILT_SHARED_LIBRARY

include $(CLEAR_VARS)
LOCAL_MODULE    := mylib_use_thirdlib
LOCAL_SRC_FILES := src.c

LOCAL_STATIC_LIBRARIES := thirdlib1       #or LOCAL_SHARED_LIBRARY 

include $(BUILD_SHARED_LIBRARY)   #如果编译静态库,需要Application.mk

0
0
查看评论

Android NDK生成及连接静态库与动态库

对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用。但是在某些情况下,我们需要借助C/C++来写JNI本地代码。比如,在使用跨平台的第三方库的时候;为了提升密集计算性能的时候(这种情况下往往还可能会直接使用汇编语言)。因此,这里我将为大家介绍如何给其它开发者创建可供使用的...
  • listener51
  • listener51
  • 2016-10-23 11:46
  • 585

NDK学习笔记:动态链接库与静态链接库的基本使用流程简记

背景最近做了一段时间的项目中涉及到一些ffmpeg视频编解码的应用和OpenCV算法在Android的使用,其中免不了需要使用jni在java层调用相关算法的内容,尤其当业务逻辑复杂时还需要cpp层调用java层的函数。在此也总结了一些jni使用上的方法以及一些常见的问题。本文我们将总结一些基础知识...
  • lidec
  • lidec
  • 2016-11-19 15:26
  • 5973

NDK 编译和使用静态库、动态库; Android.mk 文件语法详解; Android.mk高级写法

以下所有是基于Eclipse的,使用命令行的绕道。  1、STL的使用,以stlport为例  官方的说法是只需要在Application.mk文件中添加如下一行即可  Application.mk代码   APP_STL :...
  • chinabinlang
  • chinabinlang
  • 2016-02-15 12:33
  • 4599

android NDK学习篇2之two-libs——使用(单个)静态库生成动态库

下面以NDK提供的two-libs为例子,走一遍如何在jni层调用其他C文件的函数,原例子在second.c这个jni层文件中调用first.c里面的C函数。 通过Androi.mk文件编译生成一个动态库文件。 1、建立android工程,编写java对应JNI层的本地接口: package c...
  • Sunnyfans
  • Sunnyfans
  • 2013-10-21 21:56
  • 5234

windows下使用cmake和ndk编译android所用动态库.so和静态库.a

不在linux上编译android所用.a和.so,在windows上如何编译呢?  1.准备工作: 1.vs2008,别的版本vs应该也可以,我用的就是2008; 2.cmake,下载个最新的版本,装上,安装好后把bin目录加入环境变量; 3.ndk,最新版本是ndk10了,附上下载地...
  • zmscs
  • zmscs
  • 2015-03-17 22:36
  • 3235

Android NDK生成共享库和静态库

在Android平台上,通过NDK可以编译NativeC程序,生成原生的NativeCode。从生成的代码的使用方式来看,主要有三种形式:Native Executable Binary, Shared Dynamic Library, 以及Static Link Library。接下...
  • qjbagu
  • qjbagu
  • 2016-05-08 13:50
  • 2743

android 静态库和动态库编译

android 库的编译依赖于nkd-build,使用之前请先安装NDK。编译依赖 Android.mk 和 Application.mk 两个文件。Android.mk(同时编译静态库和动态库):LOCAL_PATH := $(call my-dir)$(info ) $(info ****** ...
  • jayckler
  • jayckler
  • 2017-01-21 14:20
  • 713

Android NDK编译Openssl-1.1.0f静态库

0 前言 按照源代码C:\openssl-1.1.0f下的INSTALL文件中的编译指导,在Windows中用Cygwin模拟Linux环境顺利编译出libcrypt.a和libssl.a,然而在Android NDK项目中编译报错不通过,报错无法解析的符号,检查.a静态库链接是正确的,所以推测用C...
  • ljttianqin
  • ljttianqin
  • 2017-06-10 16:35
  • 815

NDK编译和使用静态库、动态库

默认所有代码和文件在$project/jni下,否则特殊说明。 情况一:编译静态库 文件Android.mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE...
  • earbao
  • earbao
  • 2016-07-07 10:18
  • 404

关于android studio使用cmake 编写jni调用静态库、动态库的方式

最近在帮助项目的大神测试编译出来的安卓动态库,需要用到jni,但是使用ndk去编译有太麻烦(还是懒),毕竟库太多了。然后以前听说android studio被谷歌搞得可以使用cmake 去编译源码库,于是乎,就更新了许久未用的android studio。在这个过程中真的是很恶心。使用jni动态注册...
  • Stone_OverLooking
  • Stone_OverLooking
  • 2017-11-30 17:31
  • 426
    个人资料
    • 访问:573471次
    • 积分:7926
    • 等级:
    • 排名:第3144名
    • 原创:219篇
    • 转载:49篇
    • 译文:0篇
    • 评论:224条
    博客专栏
    最新评论