## 编译
一般将需要一直的第三方库下载解压到 external中
本文以 作者添加 libiconv库来举例
下载 libiconv库https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
解压到 external/libiconv中
在external/libiconv 运行此库的 ./configure -host=arm(不要看其它博客所说host指向 arm-XXX 等等之类的,那些都是为了jni用的(ndk编译使用),我们这里要做的是Android底层支持库
生成好makefile之后(其实这里主要是转译.in文件成正常的h文件或c/cpp文件)
编写Android.mk或者Android.bp,强烈建议使用bp文件,编译内容参数结构明显
bp编译选项不再赘述,参数根据自己需求改写,包括生成binary或者static_library
cc_defaults {
name: "libiconv_defaults",
srcs: [
"libcharset/lib/localcharset.c",
"lib/iconv.c",
"lib/relocatable.c",
],
local_include_dirs: [
"include",
"libcharset",
"lib",
"libcharset/include",
],
export_include_dirs: ["include"],
cflags: [
"-Wno-multichar",
"-Wno-unused-const-variable",
"-Wno-unused-variable",
"-Wno-unused-parameter",
"-Wno-sign-compare",
"-Wno-parentheses-equality",
"-Wno-missing-field-initializers",
"-Wno-static-in-inline",
"-DAndroid",
"-DBUILDING_LIBICONV",
"-DIN_LIBRARY",
"-DLIBDIR=\"c\"",
],
}
cc_library_shared {
name: "libiconv",
defaults: ["libiconv_defaults"],
vendor_available: true,
host_supported: true,
}
此时运行配置好源码编译环境后,在此目录下 mm即可单模块编译此动态库
要想源码整编带入此模块编译,参照自己源码工程的.mk文件,适当加入该模块,即可整编带入
## 引用
在你需要引用此库的工程mk或者bp文件中
Android.mk 中
LOCAL_SHARED_LIBRARY := libiconv
Android.bp 中
以下是我用到的地方 新增的 libiconv
代码中你要引用的头文件参见 编译库bp的 export_include_dirs
// Build blkid
cc_binary {
name: "blkid",
defaults: ["e2fsprogs-defaults"],
srcs: ["blkid.c"],
cflags: ["-Wno-unused-variable"],
shared_libs: [
"libext2fs",
"libext2_blkid",
"libext2_com_err",
"libext2_e2p",
"libiconv",
],
system_shared_libs: ["libc", "libdl"],
}