• Android make 如何通过编译预置文件到系统


    预置文件到系统, 踩了点坑, 记录一下

    Android 编译一个产品, 需要准备AndroidProduct.mk,  boardConfig.mk, AndroidBoard.mk 三个文件。 关于这点参考下面的参考文件。 

    三个产品文件的调用顺序

    1. AndroidProduct.mk: 放置在"device/厂商名/产品名",或"vendor/厂商名/产品名"中。 该过程引入一些相对路径变量, 比如TARGET_COPY_OUT_PRODUCT, 对应的值为“product”, 可以等同为烧录到系统中时的路径/product。在该阶段, 不能使用类似于TARGET_OUT_PRODUCT 这种变量,此类变量包含产品名称, 此时尚未定义好, 如TARGET_OUT_PRODUCT:“./out/target/product/XXXXXX/product/”, 其中XXXXXX为产品名称,在AndroidProduct.mk后TARGET_OUT_PRODUCT变量才会被准备好。 所以该阶段不要使用TARGET_OUT_PRODUCT等类似变量。 
    2. boardConfig.mk: 厂商的一些配置信息。 
    3.  AndroidBoard.mk: 最后调用, 该阶段TARGET_OUT_PRODUCT可用, 但PRODUCT_COPY_FILES变量已经不可变更, 所以不能在AndroidBoard.mk阶段修改PRODUCT_COPY_FILES变量。

    预置文件到系统

    如果需要预置文件到系统,例如需要预置的文件放置在目录"device/厂商名/产品名/test/res"中, 

    在AndroidProduct.mk 阶段

    1. 在test目录下创建test.mk文件:
      1. #其中LOCAL_PATH为AndroidProduct.mk所在目录, 如device/厂商名/产品名。 
      2. LOCAL_DATA :=$(LOCAL_PATH)/test 
      3. #添加文件夹下所有文件。 将(LOCAL_PATH)/test/res下的所有文件copy到/product/res下
      4. #注意不能使用TARGET_OUT_PRODUCT这类变量, 因为还没定义。
      5. PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,$(LOCAL_DATA)/res,$(TARGET_COPY_OUT_PRODUCT)/res)
      6. #添加一个文件。 将(LOCAL_PATH)/test/xxx.xx文件copy到/system/res/下。
      7. PRODUCT_COPY_FILES += $(LOCAL_DATA)/xxx.xx:$(TARGET_COPY_OUT_SYSTEM)/res/xxx.xx
    2. AndroidProduct.mk文件中添加:
      1. .......
      2. include $(LOCAL_PATH)/test/test.mk

    在AndroidBoard.mk阶段

    在test目录下创建test.mk文件:

    1. #可以使用call my-dir。如果在AndroidProduct.mk阶段不能使用my-dir, 没定义!
    2. LOCAL_PATH := $(call my-dir)
    3. # mkdir要使用的路径。 TARGET_OUT_PRODUCT此时可以使用, 对应./out/target/product/XXXXX/product
    4. $(shell mkdir -p $(TARGET_OUT_PRODUCT)/res)
    5. # 将整个文件夹copy文件到./out/target/product/XXXXX/product/下
    6. $(shell cp -rf $(LOCAL_PATH)/res $(TARGET_OUT_PRODUCT)/)

    参考:

    Android 编译过程:

    android系统编译过程详解_markvz的博客-CSDN博客

  • 相关阅读:
    Hbase
    今天是个好日子,TaxCore(POS软件)备案指北
    JavaFX:控件边框设置
    React 开发必须知道的 34 个技巧【近1W字】
    视频融合平台EasyCVR视频广场页脚优化为瀑布流式的实现方式
    【Python】python易错细节整理
    【C语言】通讯录——示例以及详解
    C语言二维数组定义、赋值、按要求遍历操作、输出以及函数调用
    Selenium多浏览器处理
    selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?
  • 原文地址:https://blog.csdn.net/april_12345/article/details/126115990