将 .so 库添加到 Android 10 build 的正确方法
Correct way to add .so library to Android 10 build
我曾多次尝试通过调整旧指令 and here.
将单个共享对象库添加到 Android 10 版本
我使用双目标示例在 /device/vendor/name/ 下添加了一个包含库的目录和一个 Android.mk 文件。
他们都导致了同样的错误:
build/make/core/base_rules.mk:480: error: writing to readonly directory: "system/lib64/libjni_latinimegoogle.so"
是否有 correct/accepted 方法可以做到 10 人?谢谢
编辑:Android.mk 文件内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libjni_latinimegoogle
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
LOCAL_PRELINK_MODULE := false
ifdef TARGET_2ND_ARCH
LOCAL_MULTILIB := both
LOCAL_MODULE_PATH_64 := system/lib64
LOCAL_SRC_FILES_64 := system/lib64/libjni_latinimegoogle.so
LOCAL_MODULE_PATH_32 := system/lib
LOCAL_SRC_FILES_32 := system/lib/libjni_latinimegoogle.so
else
LOCAL_MODULE_PATH := system/lib64
LOCAL_SRC_FILES := system/lib64/libjni_latinimegoogle.so
endif
include $(BUILD_PREBUILT)
问题在于使用 kati
。
当您尝试在 out/
之外生成构建输出时会发生这种情况。或者,对于内核,如果您为构建目标使用绝对路径。内核部分不是您关注的重点,但有人可能需要此信息。
因此,您的 LOCAL_MODULE_PATH
指向的位置无效。
正确的方法是在设备makefile中指定。目标是将手势输入添加到 LineageOS 17.1 版本中——以 Pixel 3XL 交叉影线为例:
在 PRODUCT_COPY_FILES 下的 vendor/google/crosshatch/crosshatch-vendor.mk
中,添加行以复制与其周围类似的 .so 库,在 lib64(或 32 位设备构建的 lib)下:
PRODUCT_COPY_FILES += \
...
vendor/google/crosshatch/proprietary/lib64/libjni_latinimegoogle.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libjni_latinimegoogle.so \
...
TARGET_COPY_OUT_SYSTEM 会将其定向到系统分区与 PRODUCT、SYSTEM_EXT 或 VENDOR,它们也是选项。
最后确保将.so文件添加到需要从本地复制的地方,在vendor/google/crosshatch/proprietary/lib64
下
手势输入将在下一个版本中启用。这也适用于 LineageOS 18.1
我曾多次尝试通过调整旧指令
我使用双目标示例在 /device/vendor/name/ 下添加了一个包含库的目录和一个 Android.mk 文件。
他们都导致了同样的错误:
build/make/core/base_rules.mk:480: error: writing to readonly directory: "system/lib64/libjni_latinimegoogle.so"
是否有 correct/accepted 方法可以做到 10 人?谢谢
编辑:Android.mk 文件内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libjni_latinimegoogle
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
LOCAL_PRELINK_MODULE := false
ifdef TARGET_2ND_ARCH
LOCAL_MULTILIB := both
LOCAL_MODULE_PATH_64 := system/lib64
LOCAL_SRC_FILES_64 := system/lib64/libjni_latinimegoogle.so
LOCAL_MODULE_PATH_32 := system/lib
LOCAL_SRC_FILES_32 := system/lib/libjni_latinimegoogle.so
else
LOCAL_MODULE_PATH := system/lib64
LOCAL_SRC_FILES := system/lib64/libjni_latinimegoogle.so
endif
include $(BUILD_PREBUILT)
问题在于使用 kati
。
当您尝试在 out/
之外生成构建输出时会发生这种情况。或者,对于内核,如果您为构建目标使用绝对路径。内核部分不是您关注的重点,但有人可能需要此信息。
因此,您的 LOCAL_MODULE_PATH
指向的位置无效。
正确的方法是在设备makefile中指定。目标是将手势输入添加到 LineageOS 17.1 版本中——以 Pixel 3XL 交叉影线为例:
在 PRODUCT_COPY_FILES 下的 vendor/google/crosshatch/crosshatch-vendor.mk
中,添加行以复制与其周围类似的 .so 库,在 lib64(或 32 位设备构建的 lib)下:
PRODUCT_COPY_FILES += \
...
vendor/google/crosshatch/proprietary/lib64/libjni_latinimegoogle.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libjni_latinimegoogle.so \
...
TARGET_COPY_OUT_SYSTEM 会将其定向到系统分区与 PRODUCT、SYSTEM_EXT 或 VENDOR,它们也是选项。
最后确保将.so文件添加到需要从本地复制的地方,在vendor/google/crosshatch/proprietary/lib64
手势输入将在下一个版本中启用。这也适用于 LineageOS 18.1