9

Androidのソースコードに含めたいネイティブバイナリがあるので、コンパイルすると、バイナリが/ system/binに含まれます。

バイナリを/prebuilt/ android-arm / my-binaryフォルダーにコピーし、次の新しいAndroid.mkを作成しました。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := my-binary
LOCAL_MODULE := my-binary
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)

しかし、makeを実行すると、ログに表示される唯一の参照は次のとおりです。

target Prebuilt: my-binary (out/target/product/generic/obj/EXECUTABLES/my-binary_intermediates/my-binary)

また、バイナリはsystem.imgにまったくインストールされていません。Androidにビルド済みのバイナリをインストールする場合もほぼ同じ質問があります。「見つかりません」ですが、質問者は基本的な手順をすでに知っていて、まったく説明されていません。make my-binaryを実行すると、投稿したのと同じ行が表示されます。

また、 make out / target / product / generic / system.img my-binaryを実行しようとしましたが、どちらも機能しません。私のバイナリはoutサブフォルダに表示されますが、system.imngには含まれません

私は何かが足りないのですか?make -j#を実行するだけで私のバイナリが/ system / binに含まれるようにする方法はありますか?

4

3 に答える 3

9

エミュレータでテストしたところ、動作しています。このフォルダーの gdbserver の例として使用しました。Android用にクロスコンパイルされたstraceがあり、それを使用して画像に埋め込まれています。したがって、手順はこの実行可能ファイルに対するものになります。

  1. prebuilt/android-arm/strace の下にフォルダーを作成します。
  2. バイナリをそこに置きます(私の場合はstrace)

次の内容の Android.mk ファイルを追加します。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := strace
LOCAL_MODULE := strace
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
include $(BUILD_PREBUILT)


prebuilt_files :=

$(call add-prebuilt-files, EXECUTABLES, $(prebuilt_files))

指示に従ってビルドします: mmm prebuilt snod -j4(イメージが既にビルドされている場合) または、もちろん、make -j4同様に使用することもできます。

于 2012-06-13T14:33:23.557 に答える
3

バイナリが out ディレクトリにあるのにイメージにない場合は、イメージにバイナリを含めるルールがないためです。

device/<vendorname>/<devicename>/device.mk(または に含まれる一部の makefile にdevice.mk)、次の 2 つのエントリのいずれかが必要です。

PRODUCT_PACKAGES += my-binary

また:

PRODUCT_COPY_FILES += path/to/my-binary:/root/target/path/to/my-binary

PRODUCT_PACKAGES...アプローチを提案します。PRODUCT_COPY_FILESスクリプトと構成ファイルにより適しています。

注:PRODUCT_PACKAGESモジュール名を使用します。ここPRODUCT_COPY_FILESで、バイナリの実際の名前/場所を使用します。

于 2016-06-03T19:05:09.767 に答える