2016-04-03 29 views
0

私はクロスコンパイラと標準のgnu make utilsを使って共有ライブラリを構築するNDKプロジェクトを持っています。それは別のスクリプトで行われます。しかし、私のプロジェクトでライブラリを使用する目的で、自分のAndroid.mkプロセスがまだビルドされていない場合は、スクリプトを呼び出して共有ライブラリを生成してから、Android.mkのプロセスにPREBUILT_SHARED_LIBRARYプロセスを使ってラップしてください。Android.mk PREBUILT_SHARED_LIBRARYスクリプトからLOCAL_SRC_FILESファイルを生成する方法は?

現在、オフラインスクリプトを実行してlibmy_so.soを生成すると、次のメイクファイルが動作します。しかし、私が最初に明示的にスクリプトを実行しない場合、私は次のエラーを取得:

Android NDK: ERROR:/path_to_project/Android.mk:my_module: LOCAL_SRC_FILES points to a missing file

をしてmakeプロセスも依存関係を解決しようとする前に失敗しているので、私のスクリプトは、呼び出されることはありません。

include $(CLEAR_VARS) 

LOCAL_MODULE  := my_module 
LOCAL_SRC_FILES  := libmy_so.so 
LOCAL_EXPORT_CFLAGS := # some stuff 
LOCAL_EXPORT_LDLIBS := # some stuff 
$(LOCAL_PATH)/libmy_so.so: 
    echo "generate file" 
    $(shell run_script_that_creates_libmy_so.so) 

include $(PREBUILT_SHARED_LIBRARY) 

これにはクリーンな解決策がありますか?私はスクリプトを自動的に前処理ステップとして実行してもOKです(ファイルがすでに存在する場合、スクリプトを静かに終了させることができます)。しかし、LOCAL_SRC_FILES変数が存在しないファイルを指すようにする呪文は見つかりませんでした。私はダミーを配置することを考えましたlibmy_so.soが、それは醜いハックです。

+0

私はbuild.gradleでndkを設定し、必要なものに依存させるべきだと思います。 –

+0

私は実際にNDKで作業するようになっている拡張可能なツールを作成しているので、実際にはbuild.gradleを直接使用することはできません。私が何をしようとしているのかを見るには、[このプロジェクト](https://github.com/ericwlange/hemroid)を参照してください。 –

答えて

0

ハックを見つけましたか?

ハックが見つかりました。

ifndef prebuilt 
$(call __ndk_info,ERROR:$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_SRC_FILES points to a missing file) 
$(call __ndk_info,Check that $(prebuilt_path) exists, or that its path is correct) 
$(call __ndk_error,Aborting) 
#endif 

私は(私はprebuilt-library.mkの私のコピーを参照先のとprebuilt-shared-library.mk)このファイルのコピーを作成し、エラーを停止するためにこれらの行をコメントアウト:NDKでのメイクファイルprebuilt-library.mkは、次の行が含まれています。そして、そのトリックは、最初に評価するいくつかのターゲットを生成したいファイルに依存させることです。 NDKの.mkスクリプトを掘り下げた後、私はlibrariesがその目的に役立つことを発見しました。 libraries: $(LOCAL_PATH)/libmy_so.soAndroid.mkに追加することで、最終的に私が望むことができます。

include $(CLEAR_VARS) 

LOCAL_MODULE  := my_module 
LOCAL_SRC_FILES  := libmy_so.so 
LOCAL_EXPORT_CFLAGS := # some stuff 
LOCAL_EXPORT_LDLIBS := # some stuff 
$(LOCAL_PATH)/libmy_so.so: 
    echo "generate file" 
    $(shell run_script_that_creates_libmy_so.so) 
libraries: $(LOCAL_PATH)/libmy_so.so 

include /path/to/my/mk/files/prebuilt-shared-library.mk 

これは明らかに、私は私のmakefileは、NDKの新しいバージョンで成熟するが、それはトリックを行うことを確認したいような理想的な未満です。それでももっと洗練されたソリューションに興味があります。

関連する問題