在Android.mk中包含Python库

时间:2014-05-14 00:01:04

标签: android python android-make

说我有这样的文件结构:

/top_lib
    Android.mk
    /sub_lib1
        Android.mk
        __init__.py
        cheese_maker.py
/middle_lib/
    Android.mk
    /sub_lib2
        Android.mk
        __init__.py
        bread_baker.py
/another_lib
    Android.mk
    /sub_lib3
        Android.mk
        __init__.py
        leaf_raker.py

并在top_lib / Android.mk和another_lib / Android / mk和middle_lib / Android.mk中定义了一个make函数

define add-file
    include $$(PROJECT_DEFAULTS)
    LOCAL_MODULE := $(1)
    LOCAL_MODULE_TAGS := job_stuff
    LOCAL_MODULE_CLASS := ETC
    LOCAL_MODULE_PATH := $(DESTINATION_DIR)/job_stuff/$(strip $(2))
    LOCAL_SRC_FILES := $(1)
    include $$(PROJECT_PREBUILT)
endef

define add-files-to-job
    $(foreach f,$(2),$(eval $(call add-file,$f,$(1))))
endef

include $(call all-subdir-makefiles)

在每个sub_lib / Android.mk中,我有以下内容:

LOCAL_PATH := $(call my-dir)
FileList  := $(notdir $(wildcard $(LOCAL_PATH)/*.py))
DirName := $(notdir $(LOCAL_PATH:%/=%))

$(call add-files-to-job, $(DirName), $(FileList))

在another_lib中,如果我做mm,那一切都很好用。甚至在middle_lib或top_lib中。但如果我在树的顶部,并说运行m job_stuff,最终我遇到了一个错误:

build/core/base_rules.mk:147 ** path/to/middle_lib: MODULE.TARGET.ETC.__init__.py already defined by path/to/top_lib Stop.

我想我明白发生了什么。它在MODULE.TARGET.ETC中暂存文件,并且具有相同名称的文件会引发错误。但我不知道的是如何解决它。我尝试将LOCAL_MODULE := $(1)更改为LOCAL_MODULE := $(2).$(1),这使得文件夹名称显示在每个文件名之前(例如:sub_lib1.cheese_maker.py),我想我告诉它要做的事情。

我知道如果我将LOCAL_MODULE_CLASS := ETC更改为其他任何内容,例如其中一个Android.mk文件中的LOCAL_MODULE_CLASS := ETCA,它就会对该文件起作用。但我似乎无法在LOCAL_MODULE_CLASS上找到很多文档以及如何利用它,而且由于构建系统非常复杂,我不确定在整个地方创建新类的影响。

我还尝试将添加文件的文件更改为更多

LOCAL_PATH := $(call my-dir)
FileList  := $(notdir $(wildcard $(LOCAL_PATH)/*.py))
DirName := $(notdir $(LOCAL_PATH:%/=%))

include $$(PROJECT_DEFAULTS)
LOCAL_MODULE := $(DirName)
LOCAL_MODULE_TAGS := job_stuff
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(DESTINATION_DIR)/job_stuff/$(DirName)
LOCAL_SRC_FILES := $(FileList)
include $$(PROJECT_PREBUILT)

那说当我跑mm时它确实有用,但是在树的顶部,job_stuff什么也没做(好吧,它构建了很多东西,但$(DESTINATION_DIR)是空的)

所以我被卡住了。如何在不同的库中使用多个 init .py文件?

0 个答案:

没有答案