赞
踩
在 packages/apps
下面以需要预置的 APK 名字创建文件夹,以预置一个名为 MyExample
的APK为例。
将 MyExample.apk
放到 packages/apps/MyExample
下面。
在 packages/apps/MyExample
下面创建文件 Android.mk
,文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := < your app folder name >
# 签名
LOCAL_CERTIFICATE := < desired key >
# 指定 src 目录
LOCAL_SRC_FILES := < app apk filename >
LOCAL_MODULE_CLASS := APPS
# 该模块的后缀,不用定义
#LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)
解释:
LOCAL_PATH := $(call my-dir)
每个 Android.mk 文件必须以定义 LOCAL_PATH 为开始,它用于在开发 tree 中查找源文件。
include $(CLEAR_VARS)
CLEAR_VARS 变量由 Build System 提供,并指向一个指定的 GNU Makefile,由它负责清理很多 LOCAL_xxx。
例如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES 等等,但不清理 LOCAL_PATH。
LOCAL_MODULE_TAGS := user eng tests optional
可选定义,表示在什么版本情况下编译该版本,默认 optional
user: 指该模块只在 user 版本下才编译
eng: 指该模块只在 eng 版本下才编译
tests: 指该模块只在 tests 版本下才编译
optional:指该模块在所有版本下都编译
LOCAL_MODULE
模块名,可不用定义,默认 = $(LOCAL_PACKAGE_NAME),不能和既有模块相同,如果该变量未设置,则使用 LOCAL_PACKAGE_NAME,如果再没有,就会编译失败。
LOCAL_CERTIFICATE
在什么情况下签名。
testkey:普通 APK,默认情况下使用。
platform:该 APK 完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的 APK 所在进程的 UID 为 system,可以参见 Settings。
shared:该 APK 需要和 home/contacts 进程共享数据,可以参见 Launcher。
media:该 APK 是 media/download 系统中的一环,可以参见 Gallery。
LOCAL_MODULE_CLASS
指定模块的类型,可不用定义。
# 编译 apk 文件
LOCAL_MODULE_CLASS := APPS
# 编译 jar 包
LOCAL_MODULE_CLASS := JAVA_LIBRAYIES
# 定义动态库文件
LOCAL_MODULE_CLASS := SHARED_LIBRAYIES
# 编译可执行文件
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PACKAGE)
表示生成一个 apk,它可以是多种类型
BUILD_PACKAGE(既可以编apk,也可以编资源包文件,但是需要指定LOCAL_EXPORT_PACKAGE_RESOURCES:=true)
BUILD_JAVA_LIBRARY(java共享库)
BUILD_STATIC_JAVA_LIBRARY(java静态库)
BUILD_EXECUTABLE(执行文件)
BUILD_SHARED_LIBRARY(native共享库)
BUILD_STATIC_LIBRARY(native静态库)
Android.mk文件完整配置:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := MyExample
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)
aosp/build/
目录下查找添加文件的位置:Calendar
日历应用,所以我们可以通过查找Calendar
所在的文件位置,确定需要添加文件的位置:grep "Calendar" ./ -rn
grep "Contacts" ./ -rn
2)打开我们查找到的文件`aosp/build/make/target/product/handheld_product.mk`,在文件中添加内容:
```
PRODUCT_PACKAGES += \
MyExample\
```
mmm
命令来编译指定的模块:cd ~/aosp/packages/apps/MyExample
mmm
system.img
:cd ~/aosp
make snod
说明:如果编译过程报错:
build/make/core/Makefile:2787: warning: Warning: with dexpreopt enabled, you may need a full rebuild.
15:02:00 Excepted "out/target/product/sargo/.installable_files" to be readable
将dex优化关闭:packages/apps/MyExample/Android.mk
LOCAL_DEX_PREOPT := false
回到第5步重新编译指定模块及system.img
:
这时候就能成功编译,如图:
system.img
烧到设备中验证。adb reboot bootloader
fastboot reboot fastboot
fastboot flash system system.img
参考:
https://www.shuzhiduo.com/A/amd0N7BkJg/
http://wuxiaolong.me/2019/02/10/APPPreset/
https://blog.csdn.net/Kitty_Landon/article/details/54584772?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4
https://blog.csdn.net/w2064004678/article/details/107949108
https://www.bilibili.com/video/BV1ct4y1i7FV?spm_id_from=333.337.search-card.all.click
https://www.bilibili.com/video/BV1VZ4y1L7rJ?spm_id_from=333.337.search-card.all.click
https://www.bilibili.com/video/BV1Ar4y1w7bh?spm_id_from=333.337.search-card.all.click
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。