LOCAL_SHARED_LIBRARIES += 动态库
LOCAL_STATIC_LIBRARIES += 静态库
LOCAL_LDFLAGS := 静态动态都可以
LOCAL_SHARED_LIBRARIES和LOCAL_STATIC_LIBRARIES是引入系统的,LOCAL_LDFLAGS是引用第三方的。
其实如果我们在研究Android源码编译,然后下载了Android源码,使用mm或者mmm命令编译的话,其实LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES 这2个就够用了。
因为mm或者mmm命令,会把生成的so文件,或者是a文件会放在系统目录下。
以我自己这边为例子:
so文件放在:out/target/product/generic/obj/lib文件夹下
a文件放在 :out/target/product/generic/obj/STATIC_LIBRARIES 对应的文件夹下
所以 LOCAL_SHARED_LIBRARIES 其实对应的是out/target/product/generic/obj/lib
LOCAL_STATIC_LIBRARIES 对应的是out/target/product/generic/obj/STATIC_LIBRARIES
在研究源码的时候 一般就不需要LOCAL_LDFLAGS 来引入自己写的测试的so或者a了,因为都会放在那2个文件夹下。
当然 如果确实需要引入其他人写的so文件,那就另当别论了。
LOCAL_LDFLAGS 如何使用呢
LOCAL_LDFLAGS := -L(路径) -l(模块名) 这是动态的引入方法
LOCAL_LDFLAGS := (.a文件所在的全路径) 这是静态的引入方法
其实当当只用一个LOCAL_LDFLAGS 也可以,完全可以不用LOCAL_SHARED_LIBRARIES和LOCAL_STATIC_LIBRARIES。
甚至LOCAL_LDFLAGS的功能更强大,因为LOCAL_SHARED_LIBRARIES和LOCAL_STATIC_LIBRARIES只能引入2个文件夹下的库
而LOCAL_LDFLAGS既可以引入任何库。
看下我的demo
引入动态库 LOCAL_LDFLAGS := -L./lib -ltest
引入当前文件夹下的lib的test模块
引入静态库LOCAL_LDFLAGS := $(LOCAL_PATH)/lib/libtest.a
引入当前lib文件夹下的libtest.a
以上都是引入三方库,
如何利用LOCAL_LDFLAGS 引入系统库呢
引入系统的动态库
LOCAL_LDFLAGS := -llog
引入系统的log库
引入下系统的静态库
LOCAL_LDFLAGS := out/target/product/generic/obj/STATIC_LIBRARIES/libtest_intermediates/libtest.a
引入静态库需要.a文件的全路径
引入系统的动态库使用LOCAL_LDFLAGS 倒也方便,使用LOCAL_LDFLAGS引入静态库倒是有点麻烦了,所以这里不推荐。