【问题标题】:Android runtime linking issueAndroid运行时链接问题
【发布时间】:2013-02-13 00:25:26
【问题描述】:

我正在尝试在 Linux 中使用 android 构建系统构建应用程序和接口 jar 我的应用程序依赖于我的界面,因此我必须在应用程序制作之前准备好界面 jar。

但我们在使用新构建的接口 jar 时遇到了构建/运行时问题。 我试图以两种不同的顺序制作应用程序。

案例 1. 将接口构建为本地模块并将其与 apk 链接为 LOCAL_JAVA_LIBRARIES。 案例 2. 将接口构建为本地模块并将其与 apk 链接为 LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES。

以下是主界面和界面的 Android.mk 文件。

1.Main 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.Interface Android.mk : /source/interface/Android.mk

========================================

LOCAL_PATH:= $(call my-dir)

包括 $(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:= $(call my-dir)

LOCAL_PATH:= $(TOP_LOCAL_PATH)

包括 $(CLEAR_VARS)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := 我的应用程序

LOCAL_JAVA_LIBRARIES := 我的界面

包括 $(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:= $(call my-dir)

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 := $(call 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 时,并使用此构建 application-apk Linux下的接口jar(通过静态链接),应用运行流畅。

我的 Android.mk 文件有问题吗?请帮忙

【问题讨论】:

  • 您的应用和界面在 Android 树中的什么位置?您是否能够使用 Android 构建系统构建任何其他代码?
  • 将我们的应用程序和源代码添加到 src/mips-ics 内的单独文件夹中。 IE; src/mips-ics/our-source/app 和 src/mips-ics/our-source/interface 。我们已经集成了不同类型的应用程序,这些应用程序已成功构建并在板上运行。但是,如果我们尝试将自己的界面构建为 jar,那么我们就会遇到这些问题。

标签: android makefile embedded-linux android-build android-make


【解决方案1】:

我认为您应该在include $(BUILD_PACKAGE)include $(BUILD_MULTI_PREBUILT) 之间使用LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES

another answer

【讨论】:

    【解决方案2】:

    点击 Android 构建系统详细信息的链接 http://www.kandroid.org/online-pdk/guide/build_system.html

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多