Androidのコンパイル時に出力ディレクトリを指定する方法は?

0.はじめに

Android をコンパイルするとき、出力ディレクトリを指定する方法を友人から尋ねられることがあります。

ここには 2 つのケースがあります。

1 つは、Android の既定の出力ディレクトリを別の場所に変更する方法です。

2 つ目は、モジュールの出力ディレクトリを指定することです。

Android のデフォルトの出力ディレクトリを設定するには、セクション 1 を参照してください。

Android dist コンパイル出力ディレクトリを設定します。セクション 2 を参照してください。

特定の Android モジュールのコンパイル済み出力ディレクトリを設定します。セクション 3 を参照してください。

システム内のドキュメントの検索方法については、セクション 4 を参照してください。

1. Android コンパイル出力ディレクトリを指定する

たとえば、android-12.0.0_r28 のソース コードに基づいて、Pixel 5a デバイス (コードネーム: barbet) のイメージをコンパイルしたいとします。

Android のデフォルトの出力ディレクトリは ですout。デフォルトの出力ディレクトリを次のように変更しますout-barbet

android-12.0.0_r28$ export OUT_DIR=out-barbet
android-12.0.0_r28$ source build/envsetup.sh 
android-12.0.0_r28$ lunch aosp_barbet-userdebug

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=12
TARGET_PRODUCT=aosp_barbet
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.4.0-54-generic-x86_64-Ubuntu-20.04.4-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=SQ1A.220205.002
OUT_DIR=out-barbet
PRODUCT_SOONG_NAMESPACES=hardware/google/av hardware/google/camera...
============================================
android-12.0.0_r28$ 

ここで、出力ディレクトリが次のように設定されていることがわかりますOUT_DIR=out-barbet

ソースの後に環境で現在コンパイルされている構成を表示する場合は、コマンド ラインで printconfig を実行して、次を表示できます。

$ printconfig

2. Android dist コンパイル出力ディレクトリを指定します

Android ビルド出力ディレクトリOUT_DIR(デフォルトでは「out」) には、リリースされていないファイルが含まれています。

バージョンをリリースする場合, 通常, dist ターゲットをコンパイルします. このターゲットのデフォルトの出力パスは "out/dist" の下にあります. 次のように を設定することで変更DIST_DIRでき

make aosp_barbet-userdebug dist DIST_DIR=dist-barbet

ここでのdistはディストリビューションの略で、文字通り「発行する、配布する」という意味です

3. Android モジュールのコンパイル出力ディレクトリを指定する

自分でモジュールを開発し、モジュールをコンパイルして指定したディレクトリ (「/vendor/app」など) に出力したい場合や、コンパイル済みの apk をシステムの既製のアプリ ディレクトリ (「/system/」など) に保存したい場合があります。 priv-app")、 Android.mk に対応するモジュール内の変数を変更するLOCAL_MODULE_PATHことで。

Android に付属する 2 つの例を見てみましょう。

  • ライブラリlibrecovery_ui_extファイルを特定のlib64またはlibレコードに出力します。
# bootable/recovery/Android.mk

# librecovery_ui_ext (shared library)
# ===================================
include $(CLEAR_VARS)

LOCAL_MODULE := librecovery_ui_ext

# LOCAL_MODULE_PATH for shared libraries is unsupported in multiarch builds.
LOCAL_MULTILIB := first

ifeq ($(TARGET_IS_64_BIT),true)
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib64
else
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib
endif

LOCAL_WHOLE_STATIC_LIBRARIES := \
    $(TARGET_RECOVERY_UI_LIB)

LOCAL_SHARED_LIBRARIES := \
    libbase \
    liblog \
    librecovery_ui.recovery

include $(BUILD_SHARED_LIBRARY)

64 ビットのターゲット環境の場合は、次のディレクトリに出力します。

out/target/product/xxx/recovery/root/system/lib64

それ以外の場合は、次のディレクトリに出力します。

out/target/product/xxx/recovery/root/system/lib

  • アプリケーションをLeanbackCustomizerシステム プリセット ディレクトリsystem-privディレクトリに配置します。
# device/sample/apps/tv/LeanbackCustomizer/Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/priv-app

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_PACKAGE_NAME := LeanbackCustomizer

LOCAL_SDK_VERSION := current

include $(BUILD_PACKAGE)

4. Android ソースコードのコンパイルに関するドキュメント

実際、主に次のように、Android コードで Android をコンパイルする方法に関するいくつかの指示があります。

  • build/song/README.md
    • Android コンパイル関連ドキュメントのメイン エントリ
  • ビルド/メイク/Usage.txt
    • Android のコンパイル手順
  • ビルド/メイク/Changes.md
    • Android のコンパイルと以前のバージョンの変更
  • ビルド/メイク/非推奨.md
    • Android コンパイルで廃止され、使用されなくなった設定の一部
  • ビルド/コア/ビルド-system.html
    • Android の以前のコンパイル ドキュメントはまだ一見の価値があります

これらのドキュメントのパスと名前を思い出せない場合はどうすればよいですか?

または、これらのドキュメントに加えて、soong、kati、bazel、blueprint、およびその他のツールの使用方法を知りたい場合はどうすればよいですか?

Android ソース コードのルート ディレクトリで次の find コマンドを実行すると、この問題を解決できます。

android-12.0.0_r28$ find build/ -type f -a \( -iname "*.md" -o -iname "*.txt" -o -iname "*.pdf" -o -iname "*.html" \)
build/make/target/board/generic_x86_64_arm64/README.txt
build/make/target/board/generic_arm64/README.txt
build/make/target/board/generic_x86/README.txt
build/make/target/board/generic_64bitonly_x86_64/README.txt
build/make/target/board/generic_x86_arm/README.txt
build/make/target/board/module_arm/README.md
build/make/target/board/module_arm64/README.md
build/make/target/board/generic_x86_64/README.txt
build/make/target/board/generic/README.txt
build/make/target/board/module_x86/README.md
build/make/target/board/module_x86_64/README.md
build/make/target/board/mainline_sdk/README.md
build/make/target/product/gsi/31.txt
build/make/target/product/gsi/current.txt
build/make/target/product/gsi/29.txt
build/make/target/product/gsi/28.txt
build/make/target/product/gsi/30.txt
build/make/target/product/virtual_ab_ota/README.md
build/make/Deprecation.md
build/make/README.md
build/make/core/build-system.html
build/make/navbar.md
build/make/tools/fs_config/README.md
build/make/tools/zipalign/README.txt
build/make/tools/docker/README.md
build/make/tools/rbcrun/README.md
build/make/tools/ziptime/README.txt
build/make/tools/releasetools/jarjar-rules.txt
build/make/tools/releasetools/testdata/apexkeys_framework.txt
build/make/tools/releasetools/testdata/apkcerts_framework.txt
build/make/tools/releasetools/testdata/apexkeys_vendor.txt
build/make/tools/releasetools/testdata/apexkeys_merge.txt
build/make/tools/releasetools/testdata/apkcerts_vendor.txt
build/make/tools/releasetools/testdata/apexkeys_framework_conflict.txt
build/make/tools/releasetools/testdata/apkcerts_merge.txt
build/make/Changes.md
build/make/Usage.txt
build/soong/README.md
build/soong/navbar.md
build/soong/java/lint_defaults.txt
build/soong/cc/config/integer_overflow_blocklist.txt
build/soong/python/scripts/stub_template_host.txt
build/soong/scripts/check_boot_jars/package_allowed_list.txt
build/soong/docs/map_files.md
build/soong/docs/best_practices.md
build/soong/docs/clion.md
build/soong/docs/compdb.md
build/soong/docs/perf.md
build/bazel/README.md
build/bazel/examples/queryview/README.md
build/bazel/examples/queryview/apex_available.txt
build/bazel/examples/queryview/nocrt.txt
build/bazel/examples/queryview/android_apps.txt
build/bazel/examples/queryview/libc.txt
build/bazel/bazel_skylib/README.md
build/bazel/rules_cc/README.md
build/bazel/json_module_graph/README.md
build/bazel/docs/concepts.md
build/blueprint/README.md
build/blueprint/CONTRIBUTING.md
build/pesto/experiments/prepare_bazel_test_env/README.md

上記の find コマンドは、基本的に一般的なドキュメント形式を含む、ビルド ディレクトリ内の md、txt、pdf、および html のサフィックスを持つすべてのファイルを検索します。

ニーズに合わないと感じた場合は、状況に応じてこの検索コマンドを少し調整してください。

思考の質問:

Android をコンパイルするときに m、mm、mmm コマンドがありますが、Android コードでこれらのコマンドを使用するための指示を見つけることができますか?

おすすめ

転載: blog.csdn.net/guyongqiangx/article/details/128973555