我在创建 Android 预建共享库时遇到问题。为了弄清楚我做错了什么,我按照谷歌的例子在 android-8.1.0_r52 树的 development/ndk/tests/prebuilt-library/jni 中找到了这个例子的源代码。
这是我配置 ASOP 的方法
- $ . 构建/envsetup.sh
- $ 午餐(我选择了 29 aosp_bullhead_userdebug)
然后在上面的 jni 文件夹中我发出“$ mm”
我得到的错误是(这与我的其他项目相同)
ninja: error: 'out/target/product/bullhead/obj/SHARED_LIBRARIES/foo-prebuilt_intermediates/export_includes', needed by 'out/target/product/bullhead/obj/SHARED_LIBRARIES/foo-user_intermediates/import_includes', missing and no known rule to make it
当我为“ foo ” grep out/target/products/bullhead 文件夹时,我什么也没得到。
我也尝试更换
包括 $(PREBUILT_SHARED_LIBRARY)
和
包括 $(BUILD_PREBUILT)
并得到相同的错误,但“obj”被“obj_arm”替换。
下面是树附带的库存 Android.mk。
LOCAL_PATH := $(call my-dir)
# Define BUILD_FOO=1 to rebuild libfoo.so from scratch, then
# copy obj/local/armeabi/libfoo.so to jni/libfoo.so
#
ifneq ($(BUILD_FOO),)
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
include $(BUILD_SHARED_LIBRARY)
else # not build libfoo.so, trying to use PREBUILT_SHARED_LIBRARY instead.
# Note: the module is named foo-prebuilt, but the library is libfool.so !
#
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)
endif
这是 jni/ 目录结构
杰尼/
安卓.mk
富用户.c
libfoo.so
富/
foo.c
foo.h