2

AOSP システム パッケージ内の他のプロジェクトによって参照されている .so ファイルがあります。参照を可能にするために、Android.mk と xyz.so ファイルの 2 つのファイルを含む AOSP/external パッケージで新しいプロジェクトを作成しました。Android.mk は次のようになります。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := customutil
LOCAL_SRC_FILES := xyz.so
include $(PREBUILT_SHARED_LIBRARY)

コンパイル中に次のエラーが表示されます。

make: *ターゲットを作成するルールはありませんout/target/product/crespo/obj/lib/customutil.so', needed byout/target/product/crespo/obj/EXECUTABLES/abc_agent_intermediates/LINKED/abc_agent'. 止まる。

AOSP をビルドするときにこのエラーが発生しないようにするには、どこに xyz.so ファイルを保持する必要がありますか、またはどのような変更を加える必要がありますか?


スシル

4

3 に答える 3

1

モジュールのルールが問題です。

でビルド済みのライブラリがLOCAL_MODULE := customutilある場合、リンカーは追加のフラグを取得します-lcustomutil。したがって、あなたのLOCAL_SRC_FILES :=ニーズはLOCAL_SRC_FILES := libcustomutil.so

したがって、Android.mk セクションは次のようになります。

# Prebuilt Lib
include $(CLEAR_VARS)
LOCAL_MODULE := xyx
LOCAL_SRC_FILES := libxyz.so
include $(PREBUILT_SHARED_LIBRARY)

これは、ライブラリの名前を適切に変更するか、ライブラリ名に従ってモジュール名を設定する必要があることも意味します。

于 2012-06-19T17:06:41.330 に答える
0

デフォルトでは、ビルド済みの場合、LOCAL_SRC_FILES は現在の LOCAL_PATH 定義に関連しているため、Android.mk が の下$PROJECT/jni/Android.mkにある場合は、次の場所に配置する必要があります。$PROJECT/jni/xyz.so

名前もおそらく xyz.so ではなく libxyz.so である必要があります (ただし、lib プレフィックスがなくても機能する場合があります)。

複数の CPU ABI をサポートする予定がある場合は、次のようにサブディレクトリを使用してみてください。

include $(CLEAR_VARS)
LOCAL_MODULE := libxyz
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libxyz.so
include $(PREBUILT_SHARED_LIBRARY)

ファイルを次の場所に配置します。

$PROJECT/jni/armeabi/libxyz.so
$PROJECT/jni/armeabi-v7a/libxyz.so
$PROJECT/jni/x86/libxyz.so
...

最後に、LOCAL_SRC_FILES の絶対パスを使用することもでき、ビルド システムはそこからファイルを選択します。

于 2014-07-08T12:19:24.110 に答える