• Android.mk 中如何拷贝任意文件


    2019-10-21

    关键字:编译时自动拷贝文件


    Android 系统开发中,编译大包是常有的事。

    做系统集成开发的同学也经常能遇到需要预置一些文件进系统中,这时就需要在编译过程中使用不同于编译的命令来预置了。

    不过总得来说,编大包时拷贝的实现也很简单,至少编译系统已经帮我们完成绝大部分的工作了,我们仅仅需要将文件在编译时拷贝至指定目录下即可。

    而这一拷贝操作,仅仅需要几行 Android.mk 代码即可实现:

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    OUT=$(TARGET_OUT)/bin
    
    $(shell mkdir -p $(OUT) )
    
    define find_files
    $(shell find $(1) -name "*.sh" -exec basename {} ; )
    endef
    
    LIST=$(call find_files, $(LOCAL_PATH) )
    
    define copy_files
    $(foreach t,$(1), 
      $(shell cp $(LOCAL_PATH)/$(t) $(OUT)/$(t) ) 
    )
    endef
    
    $(call copy_files, $(LIST))

    以上编译指令是将该 Android.mk 文件所在目录下的所有 .sh 文件以及该目录下一级子目录中的 .sh 文件拷贝至 Android 系统 /system/bin 目录下的代码。可以根据该 mk 内容按需定制自己的需求。

    另外,在某些情况下可能会出现某些程序在编译大包时不会自动打包到系统镜像中的情况,此时可以在该程序的 Android.mk 中添加以下一行指令:

    ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_MODULE)         #对应于 C 程序。
    ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_PACKAGE_NAME)   #对应于 APK 程序。

  • 相关阅读:
    hdu5945 Fxx and game
    hdu5937 Equation
    2016-2017 CT S03E06: Codeforces Trainings Season 3 Episode 6 The Baguette Master
    Canada Cup 2016 D. Contest Balloons
    hdu5798 Stabilization
    bzoj 4026 dC Loves Number Theory
    Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing
    hdu5923 Prediction
    hdu5925 Coconuts
    2016弱校联盟十一专场10.2 Longest Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/chorm590/p/11651842.html
Copyright © 2020-2023  润新知