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.
.....