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 ファイルに問題はありますか? 助けてください