我一直在尝试将.so库作为AOSP中应用程序的一部分。它可以用Android.mk完成。下面是我在pacakges/app目录中的应用程序的Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := OpentokSample
LOCAL_CERTIFICATE:= platform
LOCAL_JNI_SHARED_LIBRARIES=libopentok
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))
下面是Android.mk,包括libopentok.so:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libopentok
LOCAL_PREBUILT_LIBS := opentok.so
include $(BUILD_SHARED_LIBRARY)
但这无济于事?
我认为如果使用预构建的.so文件,则应该使用include $(BUILD_PREBUILT)
,并将其标记为LOCAL_MODULE_CLASS := SHARED_LIBRARIES
。并且您需要在LOCAL_REQUIRED_MODULES
中列出依赖项。
下面是一个Android.mk示例,它添加了一个预编译的apk应用程序,并将其.so库放入系统库文件夹:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := MyApp
LOCAL_CERTIFICATE := platform
LOCAL_REQUIRED_MODULES := libamrcodec libecies
LOCAL_SRC_FILES := MyApp.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
LOCAL_MODULE := libamrcodec
LOCAL_SRC_FILES := libs/armeabi/libamrcodec.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_PRELINK_MODULE := false
#LOCAL_MODULE_PATH := system/lib
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
LOCAL_MODULE := libecies
LOCAL_SRC_FILES := libs/armeabi/libecies.so
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_PRELINK_MODULE := false
#LOCAL_MODULE_PATH := system/lib
include $(BUILD_PREBUILT)
LOCAL_MODULE_TAGS := samples
或
LOCAL_MODULE_TAGS := tests