2

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:= $(call 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を呼び出します)

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

以下は、CASE1で適用するための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;'のリンク 失敗した

以下は、CASE2で適用するための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:= MyApplications

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

0 に答える 0