04 Android系统之添加预编译模块
【摘要】
理解
在实际的系统开发过程中,有很多文件都是预先编译好的,比如第三方APK,so库, jar包, bin 文件,配置文件等。我们需要在系统编译时能把这些文件打包编译到系统镜像里面。
操作准则
我们有...
理解
在实际的系统开发过程中,有很多文件都是预先编译好的,比如第三方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
目录如下
hinzer@ubuntu: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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2、下载bin文件
hinzer@ubuntu:android-10$ cd ./device/mi/pure/prebuilt/vendor/bin
hinzer@ubuntu:bin$ wget https://busybox.net/downloads/binaries/1.21.1/busybox-i686
....
hinzer@ubuntu:bin$ file busybox-i686
busybox-i686: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped
- 1
- 2
- 3
- 4
- 5
- 6
3、添加product_copy_files.mk
hinzer@ubuntu:pure$ vim product_copy_files.mk
hinzer@ubuntu: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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4、在 $product.mk 文件中 include
hinzer@ubuntu:pure$ echo "include device/mi/pure/product_copy_files.mk" >> product01.mk
- 1
编译验证
# 编译
hinzer@ubuntu:android-10$ source ./build/envsetup.sh
hinzer@ubuntu:android-10$ lunch product01-eng
hinzer@ubuntu:android-10$ make -j4
# 启动emulator虚拟机
hinzer@ubuntu:android-10$ emulator
...
# adb shell验证
hinzer@ubuntu:~$ adb devices
List of devices attached
emulator-5554 device
hinzer@ubuntu:~$ 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.
.....
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
参考资料
文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/feit2417/article/details/105235231
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)