欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

04 Android系统之添加预编译模块

程序员文章站 2024-02-02 22:11:16
...

理解

在实际的系统开发过程中,有很多文件都是预先编译好的,比如第三方APK,so库, jar包, bin 文件,配置文件等。我们需要在系统编译时能把这些文件打包编译到系统镜像里面。

操作准则

我们有两种方法可以达到我们的目的: PRODUCT_COPY_FILES 和 定义 prebuilt 模块。

  • 如果这个文件只需要预置到指定目录就可以了,那我们就可以简单的将其加入 PRODUCT_COPY_FILES 变量就行, 比如一些 bin 文件, 配置文件。
  • 如果这个文件有其他模块编译依赖,或者这个文件需要系统签名,那我们就得定义一个预编译模块,比如一些 so 库,APK 文件, jar 包等。

添加预编译模块

这里先记录一下添加预编译模块到PRODUCT_COPY_FILES的过程,另外如何定义prebuilt,方法请查看原文
Android系统开发入门-5.添加预编译模块

1、 定义目录结构
为了维护方便,我们一般把 PRODUCT_COPY_FILES 的设置提取到一个单独的文件。在 $product.mk 里面 include 就行。这里在pure目录下创建一个prebuilt目录如下

[email protected]:android-10$ tree ./device/mi/pure/prebuilt/
./device/mi/pure/prebuilt/
├── apk      # 预置 apk 模块
├── libs       # 预置库模块,so 库, jar 包等
└── vendor    # PRODUCT_COPY_FILES 类型预置,按实际输出路径组织
    └── bin
        └── busybox-i686

4 directories, 1 file

2、下载bin文件

[email protected]:android-10$ cd ./device/mi/pure/prebuilt/vendor/bin
[email protected]:bin$ wget https://busybox.net/downloads/binaries/1.21.1/busybox-i686
....
[email protected]:bin$ file busybox-i686
busybox-i686: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped

3、添加product_copy_files.mk

[email protected]:pure$ vim product_copy_files.mk
[email protected]:pure$ cat product_copy_files.mk
# product copy files

LOCAL_PREBUILD_DIR := device/mi/pure/prebuilt

PRODUCT_COPY_FILES += \
    $(LOCAL_PREBUILD_DIR)/vendor/bin/busybox-i686:vendor/bin/busybox

4、在 $product.mk 文件中 include

[email protected]:pure$ echo "include device/mi/pure/product_copy_files.mk" >> product01.mk 

编译验证

# 编译
[email protected]:android-10$ source ./build/envsetup.sh
[email protected]:android-10$ lunch product01-eng
[email protected]:android-10$ make -j4

# 启动emulator虚拟机
[email protected]:android-10$ emulator
...

# adb shell验证
[email protected]:~$ adb devices
List of devices attached
emulator-5554	device

[email protected]:~$ adb shell busybox          # 运行可执行文件
BusyBox v1.21.1 (2013-07-08 10:44:30 CDT) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
.....

参考资料