Android Framework开发 - 向系统中添加预装App

文章目录[x]
  1. 1:模块编译
  2. 2:拷贝Apk并配置Android.mk
  3. 3:编译并打包

上一篇文章中,介绍了Android Framework开发的一些基础知识和调试技巧。在本文中,将介绍如何在系统中植入预装App,本教程以及后面一系列教程将以Android 10进行开发编译

模块编译

模块编译的前提是源码要全部编译完成一次,后面对代码修改,就可以通过编译模块的方式,从而提高开发的效率。

如下是模块编译的命令:

  • m: Makes from the top of the tree. (编译所有的模块 )
  • mm: Builds all of the modules in the current directory. (编译当前目录下的模块,当前目录下要有Android.mk文件)
  • mmm: Builds all of the modules in the supplied directories. (编译指定路径下的模块,指定路径下要有Android.mk文件)

拷贝Apk并配置Android.mk

AOSP源码根目录/packages/apps/下(或者packages/experimental/下,这个目录放一些实验性质的应用)新建一个文件夹,命名为项目名称HelloAndroid,并把项目编译后的apk改名为文件夹一样的名字放置进去,同时新建一个Android.mk文件。Android.mk文件内容如下(LOCAL_MODULE写自己的项目名称,一般就是新建的文件夹名称):

# Android.mk通常需要定义好LOCAL_PATH,表示当前工作路径,函数my-dir是编译系统提供的,返回当前路径
LOCAL_PATH := $(call my-dir)
# 这一步操作主要是清空之前定义的LOCAL_XXX开头的变量,是必须要的操作。CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx,例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.
# 这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。
include $(CLEAR_VARS)

#模块名,并且这个名字要加入到PRODUCT_PACKAGES中
LOCAL_MODULE := HelloAndroid

#不管是user 还是eng 版本都会编译此app ;
LOCAL_MODULE_TAGS := optional

# 定义编译模块所需的源文件 ;
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

#定义编译完成之后的类型:除了APPS,还有ETC,EXECUTABLES(.bin)SHARED_LIBRARIES(.so) 等选择值 
LOCAL_MODULE_CLASS := APPS

#定义编译完成之后模块的后缀
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

#定义使用原app签名可用选择项platform,shared,media
LOCAL_CERTIFICATE := PRESIGNED

#将apk编进“/system/priv-app/目录”,如果为false,或者不加这句话,就会编进“/system/app” 目录, 二者区别在于前者的权限要高于后者,即不可卸载
LOCAL_PRIVILEGED_MODULE := true

#不进行odex化
LOCAL_DEX_PREOPT := false

# 定义编译出来的目标文件,如动态库,静态库,jar包以及apk
include $(BUILD_PREBUILT)

/device/平台/.../项目目录下找到相应的版本,打开其中的 “项目名.mk” 文件, 添加:

#编译项目时,会在对应的版本中添加上这个apk。

PRODUCT_PACKAGES += HelloAndroid

编译并打包

在修改完成后,接下来重新编译system.img镜像并烧写:

#第二次编译只会编译修改过的模块
m
adb reboot bootloader
fastboot falsh system system.img
fastboot reboot

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00