Android NDK 如何使用自己的共享库
来源:互联网 发布:数据库增删改查语句 编辑:程序博客网 时间:2024/05/17 00:19
Import Module
NDK r5 支持预编译的共享库
所谓预编译的共享库,就是说你自己从其他地方找来的源码,编译出来的共享库。
这个共享库自己有,android 系统中没有。
使用方法如下:
1、声明一个共享库模块:
把这个共享库声明为 “一个” 独立的模块。
假如 libfoo.so 与 Android.mk 位于同一个目录。则 Android.mk 应该这样写:
LOCAL_PATH := $(call my-dir)LOCAL_STATIC_LIBRARIES
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt # 模块名
LOCAL_SRC_FILES := libfoo.so # 模块的文件路径(相对于 LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY) # 注意这里不是 BUILD_SHARED_LIBRARY
这个共享库将被拷贝到 $PROJECT/obj/local 和 $PROJECT/libs/<abi> (stripped)
2、在其他模块中引用这个共享库
在 Android.mk 中,将这个共享库的模块名加入 LOCAL_STATIC_LIBRARIES (静态库)
或者 LOCAL_SHARED_LIBRARIES (动态库)
例如, 使用 libfoo.so 的方法:
include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARY := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)
3、为该共享库导出头文件
这个共享库一般会有对应的头文件,比如 libfoo.so 就有 foo.h
一个简单的方法:
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
这样,使用该共享库的模块就会在其 LOCAL_C_INCLUDES 变量中,加入这个包含路径
4、调试共享库
建议你的共享库包含调试信息。 $PROJECT/libs/<abi> 目录下的共享库都是 strip 之后的
有调试信息的版本,要被 ndk-gdb 使用
5、共享库的 ABI
你的共享库与目标系统的ABI的兼容性很重要。
请检查 TARGET_ARCH_ABI,有以下值:
armeabi => ARMv5TE 以上
armeabi-v7a => ARMv7 以上
x86 => x86
建议: armeabi ABI 可以运行在所有 ARM CPU 上面。
NDK r5 支持预编译的共享库
所谓预编译的共享库,就是说你自己从其他地方找来的源码,编译出来的共享库。
这个共享库自己有,android 系统中没有。
使用方法如下:
1、声明一个共享库模块:
把这个共享库声明为 “一个” 独立的模块。
假如 libfoo.so 与 Android.mk 位于同一个目录。则 Android.mk 应该这样写:
LOCAL_PATH := $(call my-dir)LOCAL_STATIC_LIBRARIES
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt # 模块名
LOCAL_SRC_FILES := libfoo.so # 模块的文件路径(相对于 LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY) # 注意这里不是 BUILD_SHARED_LIBRARY
这个共享库将被拷贝到 $PROJECT/obj/local 和 $PROJECT/libs/<abi> (stripped)
2、在其他模块中引用这个共享库
在 Android.mk 中,将这个共享库的模块名加入 LOCAL_STATIC_LIBRARIES (静态库)
或者 LOCAL_SHARED_LIBRARIES (动态库)
例如, 使用 libfoo.so 的方法:
include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARY := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)
3、为该共享库导出头文件
这个共享库一般会有对应的头文件,比如 libfoo.so 就有 foo.h
一个简单的方法:
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
这样,使用该共享库的模块就会在其 LOCAL_C_INCLUDES 变量中,加入这个包含路径
4、调试共享库
建议你的共享库包含调试信息。 $PROJECT/libs/<abi> 目录下的共享库都是 strip 之后的
有调试信息的版本,要被 ndk-gdb 使用
5、共享库的 ABI
你的共享库与目标系统的ABI的兼容性很重要。
请检查 TARGET_ARCH_ABI,有以下值:
armeabi => ARMv5TE 以上
armeabi-v7a => ARMv7 以上
x86 => x86
建议: armeabi ABI 可以运行在所有 ARM CPU 上面。
- Android NDK 如何使用自己的共享库
- Android NDK 如何使用自己的共享库
- Android NDK 如何使用自己的共享库
- Android NDK 使用自己的共享库(Import Module)
- 如何使用自己的makefile编译android ndk项目
- Android Studio使用NDK编译自己的.so库
- Android NDK下面如何使用zlib的库
- Android NDK下面如何使用zlib的库
- Android NDK 如何缩减库的大小
- Android NDK 如何缩减库的大小
- android ndk的使用
- Android NDK的使用
- Android NDK的使用
- Android - NDK的使用
- Android NDK编程,我的第一个hello-jni程序,如何调用自己编译的so库
- JNI入门,使用NDK编写自己的SO库
- 如何使用android的ndk建立native的开发环境
- 如何使用android的ndk建立native的开发环境
- java中除数是0的问题
- Struts2 validation验证讲解(annotaion方式)
- 使用C#读写ini配置文件
- VC里的"#define new DEBUG_NEW"
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个
- Android NDK 如何使用自己的共享库
- poj 3691
- 使用jQuery实现-跨域-提交表单数据
- 今天注册了csdn的博客,期待在这里能有新的突破
- jquery关于表格隐藏和显示问题
- C# GDI+双缓冲技术(防止移动时,窗口闪烁)
- 学习strategy模式
- Drupal7学习笔记之Theme
- VoIP中语音压缩编码技术的研究与性能分析