LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := alpu_all_test
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/function/SHARE_CODE
LOCAL_SRC_FILES := $(call all-subdir-c-files)
#LOCAL_STATIC_LIBRARIES := \
# libalpu_fa_000_static
LOCAL_LDFLAGS := $(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/alpu_fa_000_YunCong_20190530.a
#LOCAL_LDLIBS := -L$(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/ -lalpu_fa_000_YunCong_20190530
#LOCAL_SHARED_LIBRARIES :=
#LOCAL_CFLAGS += -Wall -Wno-unused-parameter -std=gnu99
#LOCAL_WHOLE_STATIC_LIBRARIES := alpu_fa_000_static
include $(BUILD_EXECUTABLE)
include $(call all-makefiles-under, $(LOCAL_PATH))
#include $(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/Android.mk
方案:
(1)使用LOCAL_LDFLAGS 导入本地库的全路径,也可-L+库路径 + -l+库名称
(2)使用LOCAL_LDLIBS 例-L$(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/ (库路径,前加-L)
-lalpu_fa_000_YunCong_20190530(库名称,注意前加-l),也可直接写库全路径,如$(LOCAL_PATH)/function/CIPHER_MEMORY_LIB/alpu_fa_000_YunCong_20190530.a
以上两个LOCAL变量的两种方法(库(.a .so)全路径或-L + -l)在Android6.0上都可以使用,在Android8.1上只有库全路径的方式可以使用,如果使用(-L + -l)的方式不会在本地找库,会直接去out目录下找库(默认找动态库)和LOCAL_SHARED_LIBRARIES有点类似
(3)LOCAL_SHARED_LIBRARIES 和 LOCAL_STATIC_LIBRARIES,此种方式只会去out下找对应得库,需要库文件先编译到out下
若是已经编译好的库需要使用预编译include $(BUILD_PREBUILT),如:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX := .a
LOCAL_MODULE := libalpu_fa_000_static
LOCAL_SRC_FILES := alpu_fa_000_YunCong_20190530.a
#include $(BUILD_STATIC_LIBRARY)
#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_PREBUILT)
Android8.1已经将PREBUILT_STATIC_LIBRARY和PREBUILT_SHARED_LIBRARY 两个宏废弃,统一使用BUILD_PREBUILT预编译,通过LOCAL_MODULE_CLASS来指定编译文件类型。
另外预编译库不能使用BUILD_STATIC_LIBRARY和BUILD_SHARED_LIBRARY,使用这两个虽然不会报错,但会有警告,生成的库文件是空的,无法使用。
LOCAL_MULTILIB:=32/64/both 来指定使用的库是32位还是64位,32位库生成在out.../obj_arm
64位库生成在out.../obj/
若APK使用系统预制的lib库,在APK的Android.mk中添加LOCAL_LDLIBS :=即可,不用将这个库放在APK源码中
例如:LOCAL_LDLIBS := -llibwiegand51-jni