我正在尝试在 Linux 中使用他的 android 构建系统构建一个应用程序和一个界面 jar 我的应用程序与我的界面有依赖关系,因此我必须在应用程序制作之前准备好界面 jar。
但是我们在使用我们新构建的接口 jar 时遇到了构建/运行时问题。我们试图以两种不同的顺序制作应用程序。
案例 1. 将接口构建为本地模块并将其与 apk 链接为 LOCAL_JAVA_LIBRARIES。案例 2. 将接口构建为本地模块并将其与 apk 链接为 LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES。
以下是主界面和界面的 Android.mk 文件。
1.Andriod.mk主文件: /source/Android.mk
========================================
STACK_PATH:= $(调用我的目录)
LOCAL_PATH := $(STACK_PATH)
包括 $(CLEAR_VARS)
包括 $(LOCAL_PATH)/interface/Android.mk
包括 $(CLEAR_VARS)
LOCAL_PATH := $(STACK_PATH)
包括 $(LOCAL_PATH)/application/Android.mk
========================================
2.接口Android.mk:/source/interface/Android.mk
========================================
LOCAL_PATH:= $(调用我的目录)
包括 $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files, src)
LOCAL_MODULE := 我的界面
LOCAL_MODULE_TAGS := 可选
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_JAVA_RESOURCE_DIRS := src
包括 $(BUILD_JAVA_LIBRARY)
$(call dist-for-goals, droidcore, $(full_classes_jar):MyInterface.jar)
========================================
以下是案例 1 中应用程序的 Android.mk 文件。
应用 Android.mk:/source/application/Android.mk
========================================
TOP_LOCAL_PATH:= $(调用我的目录)
LOCAL_PATH:= $(TOP_LOCAL_PATH)
包括 $(CLEAR_VARS)
LOCAL_SRC_FILES := $(调用 all-subdir-java-files)
LOCAL_PACKAGE_NAME := MyApplication
LOCAL_JAVA_LIBRARIES := MyInterface
包括 $(BUILD_PACKAGE)
包括 $(BUILD_MULTI_PREBUILT)
========================================
构建成功完成。但是在尝试运行此应用程序时,它显示此错误。I/dalvikvm(XXXX):解析 Lcom/test/example/application 失败;接口 XXX 'Lcom/test/example/interface;' W/dalvikvm(XXXX): 类 'Lcom/test/example/application;' 的链接 失败的
以下是案例 2 中应用程序的 Android.mk 文件。
应用程序 Android.mk /source/application/Android.mk
========================================
TOP_LOCAL_PATH:= $(调用我的目录)
LOCAL_PATH:= $(TOP_LOCAL_PATH)
包括 $(CLEAR_VARS)
$(shell (cp $(LOCAL_PATH)/../out/target/common/obj/JAVA_LIBRARIES/Interface_intermediates/classes-jarjar.jar $(LOCAL_PATH)/applications/libs/MyInterface.jar))
LOCAL_STATIC_JAVA_LIBRARIES += 我的界面
LOCAL_SRC_FILES := $(调用 all-subdir-java-files)
LOCAL_PACKAGE_NAME := MyApplicationss
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += MyInterface:libs/MyInterface.jar
包括 $(BUILD_PACKAGE)
包括 $(BUILD_MULTI_PREBUILT)
========================================
这导致如下构建错误。
build/core/base_rules.mk:166: * source/applications: MODULE.TARGET.JAVA_LIBRARIES.MyInterface 已经由 source/interface 定义。停止。
但是当它们单独构建而不使用构建系统时,这个问题就不存在了。应用程序也可以正常运行。
当使用eclipse将接口构建到Myinterface.jar,并在Linux中使用这个接口jar(通过静态链接)构建application-apk时,应用程序运行顺利。
我们的 Android.mk 文件有问题吗?请查看并提出您的建议