引用动态库、静态库。
关于静态库,如果是需要是在自己应用中的jar包,需要预编译,但是不知道为什么。
关于动态库,如果是自己应用中的so库,那么需要预编译,为什么呢,因为你要把这些动态库放到系统的lib或者lib64中,否则动态加载时就找不到了,而在BUILD_PACKAGE时使用LOCAL_JNI_SHRAED_LIBRARIES引用预编译后的so模块,听说会把so库包含在apk中,而不止是放进系统lib中,但是实践证明,无论是5.0还是6.0系统都不会把so库放到apk中的;如果是源码,则只需直接编译好就行,而不用预编译这些so了,因为编译时就会将so库放进系统lib中,而预编译的作用也只是这样,所以就不用做重复的事了。因为如果一个动态库是在系统中的,那么apk中并不需要包含这个so文件,在加载该动态库时再找就好了,不用提前说明。而静态库就不一样,需要在BUILD_PACKAGE时指定要使用哪些静态库,如果静态库不是系统编译生成的,还需要预编译。
include $(BUILD_PREBUILT):预编译静态库或者动态库使用的makefile
include $(BUILD_MULTI_PREBUILT):预编译多个库时使用的makefile
LOCAL_SHARED_LIBRARIES:在编译动态库时用于指定需要链接哪些动态库
LOCAL_SHARED_LIBRARIES := \
libblf \
libutils \
libcutils
LOCAL_STATIC_JAVA_LIBRARIES:在编译apk时,指定需要链接哪些静态库
OCAL_STATIC_JAVA_LIBRARIES:= androidsupport android-support-v7-recyclerview settingslib2 settingslib3 settingslib4 com.mediatek.settings.ext
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:预编译时指定对哪些静态库进行预编译
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
androidsupport:libs/android-support-v4.jar \
settingslib2:libs/core-3.0.0.jar \
settingslib3:libs/my_gson-2.3.1.jar \
settingslib4:libs/BreathLedController.jar
include $(BUILD_MULTI_PREBUILT)
预编译so库:
include $(CLEAR_VARS)
LOCAL_MODULE := libBreathLed
LOCAL_SRC_FILES_32 := libs/armeabi/libBreathLed.so
LOCAL_MULTILIB := 32
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
include $(BUILD_PREBUILT)
android的 makefile -- Android.mk 分析