0

Linux で Android ビルド システムを使用してアプリケーションとインターフェイス jar をビルドしようとしています。私のアプリケーションはインターフェイスに依存しているため、アプリケーションを作成する前にインターフェイス jar を準備する必要があります。

しかし、新しくビルドしたインターフェース jar を使用しているときに、ビルド/実行時の問題に直面しました。2 つの異なる順序でアプリケーションを作成しようとしました。

ケース 1. インターフェイスをローカル モジュールとしてビルドし、LOCAL_JAVA_LIBRARIES として apk とリンクします。ケース 2. インターフェイスをローカル モジュールとしてビルドし、LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES として apk とリンクします。

以下は、メインとインターフェイスの Android.mk ファイルです。

1.メインの Andriod.mk ファイル: /source/Android.mk

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

STACK_PATH:= $(my-dir を呼び出す)

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:= $(my-dir を呼び出す)

$(CLEAR_VARS) を含める

LOCAL_SRC_FILES := $(all-subdir-java-files, src を呼び出す)

LOCAL_MODULE := MyInterface

LOCAL_MODULE_TAGS := オプション

LOCAL_MODULE_CLASS := JAVA_LIBRARIES

LOCAL_JAVA_RESOURCE_DIRS:= src

$(BUILD_JAVA_LIBRARY) を含める

$(dist-for-goals、droidcore、$(full_classes_jar):MyInterface.jar を呼び出す)

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

以下は、CASE 1 のアプリケーションの Android.mk ファイルです。

アプリケーション Android.mk: /source/application/Android.mk

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

TOP_LOCAL_PATH:= $(my-dir を呼び出す)

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;' のリンク 失敗した

以下は、CASE 2 のアプリケーションの Android.mk ファイルです。

アプリケーション Android.mk /source/application/Android.mk

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

TOP_LOCAL_PATH:= $(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 += MyInterface

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: * ソース/アプリケーション: MODULE.TARGET.JAVA_LIBRARIES.MyInterface は既にソース/インターフェースによって定義されています。止まる。

しかし、ビルドシステムを使用せずに個別にビルドすると、この問題は発生しません。また、アプリケーションはエラーなしで実行されます。


eclipse を使って Myinterface.jar にインターフェースをビルドし、Linux でこのインターフェース jar を使用して (静的にリンクして) application-apk をビルドすると、アプリケーションはスムーズに実行されました。

Android.mk ファイルに問題はありますか? 助けてください

4

2 に答える 2

0

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIESとの間include $(BUILD_PACKAGE)にあるべきだと思いますinclude $(BUILD_MULTI_PREBUILT)

別の回答を参照してください。

于 2016-04-28T08:28:09.410 に答える