4

私がコンパイルしたglibc環境は、より多くのAPIを提供するのに役立つため、AndroidglibcやbionicCとは異なるarm用にglibcをコンパイルしました。これで、Androidの実行中に/ system /フォルダーにglibc環境をコピーでき、chrootを実行すると、glibc環境でプログラムを実行できます。

現在、glibcとAndroidを別々にコンパイルしてから、glibcをtarしてAndroidエミュレーターsdcardにコピーし、/ systemフォルダーで解凍してから、/ system/glibcでchrootを実行しています。

glibcを個別にコンパイルしてから、Androidソースコードのどこかに配置します。Androidソースをコンパイルしているときに、glibcのビルド済みフォルダー構造全体が/ systemフォルダーにコピーされ、system.imgの一部になるようにするにはどうすればよいですか。

これにより、system.imgをAndroidエミュレーターにコピーして起動すると、glibcはすでに/ systemフォルダーに存在し、glibc環境でアプリを実行する必要があります。

アップデート

Yuriが彼の回答で述べたように(glibcフォルダーを作成し、それにすべてをコピーした)、コードをコンパイルすると、以下の出力が得られます。

build/core/main.mk:490: * Some files have been added to ALL_PREBUILT.
build/core/main.mk:491: *
build/core/main.mk:492: * ALL_PREBUILT is a deprecated mechanism that
build/core/main.mk:493: * should not be used for new files.
build/core/main.mk:494: * As an alternative, use PRODUCT_COPY_FILES in
build/core/main.mk:495: * the appropriate product definition.
build/core/main.mk:496: * build/target/product/core.mk is the product
build/core/main.mk:497: * definition used in all products.
build/core/main.mk:498: *
build/core/main.mk:499: * unexpected glibc in ALL_PREBUILT
build/core/main.mk:500: *
build/core/main.mk:501: * ALL_PREBUILT contains unexpected files. Stop.

そこで、build / core/legacy_prebuilts.mkにglibcを追加しました

しかし、それから私は得る

make: * No rule to make target mkdir', needed byout/target/product/generic/root/glibc'. Stop.
4

5 に答える 5

6

最後に、私は非常に珍しい方法でそれを行いました。

私には3つの選択肢がありました:

  1. BUILD_PREBUILT変数を使用しますが、単一のファイルに対して実行できるという欠点がありますが、複数のファイルがあり、特定の古い構造になっています
  2. PRODUCT_COPY_FILESを使用します。しかし、どういうわけかそれは私にとっては機能していませんでしたPRODUCT_COPY_FILESはデバイス用であり、私にとっては新しいデバイスではありませんでした。私はエミュレーターに取り組んでいました。
  3. Yuriによって提供されたソリューションを使用し、ALL_PREBUILT + =を使用しますが、Yuriが述べたように、それはGB用であり、私はJBとICSを使用しているため、機能しませんでした。

私が採用したアプローチは、Android.mkファイル内でシェルスクリプトを使用することです。私は次のようなものを使用しました: my_folder内にAndroid.mkを作成し、以下のテキストを入力した、事前に作成されたフォルダー構造全体を含むmy_folderという名前のフォルダーがあり、そのままanddroidoutフォルダーにコピーする必要があるとします。

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

$(shell mkdir -p $(TARGET_OUT)/my_folder/)
$(shell cp -rf $(LOCAL_PATH)/* `pwd`/$(TARGET_OUT)/my_folder/)

このようにして、my_folderディレクトリ内のすべてのビルド済みファイルとフォルダのセットがそのままandroidoutのシステムフォルダにコピーされました。

これが誰かに役立つことを願っています。

于 2013-02-12T01:18:59.307 に答える
4

PRODUCT_COPY_FILESは、モジュールファイル(Android.mk)ではなく、製品mkファイル(device / mydevice / ..)に配置する必要があります。これはここで言及されています。

この形式は、dirのコピーに使用されます。

PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,vendor/mydir,system/app)

ただし、このコマンドはapkファイルでは機能せず、エラーが発生します。

build / core / Makefile:*** PRODUCT_COPY_FILESにあるビルド済みapk:vendor / mydir / ray-system-ui-release.apk:system / app / ui-release.apk、代わりにBUILD_PREBUILTを使用してください!。止まる。

于 2016-04-18T13:29:58.950 に答える
1

これはあなたを助ける本「EmbeddedAndroid」からの例です。aospプロジェクトのルートにと呼ばれるフォルダーを作成し、rootfs-glibcそこにコピーするコードを配置Android.mkして、次の内容のファイルを作成します。

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
# This part is a hack, we're doing "addprefix" because if we don't,
# this dependency will be stripped out by the build system
GLIBC_ROOTFS := $(addprefix $(TARGET_ROOT_OUT)/, rootfs-glibc)
$(GLIBC_ROOTFS): mkdir -p $(TARGET_ROOT_OUT) cp -af $(TOPDIR)rootfs-glibc/* $(TARGET_ROOT_OUT) rm
# The last command just gets rid of this very .mk since it's copied as-is
ALL_PREBUILT += $(GLIBC_ROOTFS)

これはジンジャーブレッドにも当てはまるという注記があります。たぶん、Androidの新しいバージョンでは、makeシステムが変更されています。

于 2013-02-06T10:23:43.373 に答える
1

カスタムインストール手順でPHONY_PACKAGEを使用することを検討してください。

上記の$(shell cp what)の答えとは異なり、これはすべてのMakeステップではなく、インストールステップ中にのみ実行されます(これは確かにあなたが望むものではありません)。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := some_module
LOCAL_ADDITIONAL_DEPENDENCIES := FORCE # Decide if you need this
LOCAL_POST_INSTALL_CMD = cd $(LOCAL_PATH) && cp -a mystuff $(TARGET_OUT_WHATEVER)
include $(BUILD_PHONY_PACKAGE)
于 2018-09-12T04:34:22.470 に答える
0

私はこの方法ができるかどうかを考えていました。1。androidとglibcの両方を別々にコンパイルしました。2.両方がコンパイルされたら、glibcフォルダー全体を手動で/ out / target / product / generic / system /glibc/フォルダーにコピーします。3。次に「makesnod」を実行します。

それはうまくいくでしょうか?

于 2013-02-06T18:08:30.943 に答える