我们在开发android APP时经常需要调用第三方库文件,有的是以动态库的形式提供(.so),有的则是以静态库的形式提供(.a),这两种形式各有优势:
动态库是动态加载,只有用到的时候才会载入到内存;而静态库有较好的移植性,不依赖于其他系统库,所以适用于不同平台。
一般在android开发中一般是在一次编译中首先产生动态库或静态库,然后后续的编译中引用这些库,这种方式一般是把库放到固定的目录下,每次都会重新产生,外部复制进去的库文件会被清除,不能被使用。
那能否将第三方库随便放入到工程的某个目录下,编译时引用该库呢?答案是肯定的。
那如何书写Android.mk文件呢?
加入我们要引入第三方提供的动态库文件libtest.so,如何将该文件编译进去呢?
使用LOCAL_SHARED_LIBRARIES是将系统中的动态库加入的,例如:libz.so, libutils.so等;
引用第三方提供的库文件,假设libtest.so存放的目录是$(LOCAL_PATH)/abcd/libtest.so,那我们可以采用如下的方式加入:
LOCAL_LDLIBS += -L$(LOCAL_PATH)/abcd -ltest
如果是静态库呢?
假如我们要把$(LOCAL_PATH)/abcd/libtest.a引入到工程中,可以采用如下的方式:
LOCAL_LDFLAGS += $(LOCAL_PATH)/libtest.a