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ファイルに問題はありますか?確認して提案してください