Android 程序源码集成到系统源码(预置应用程序)

    手机厂商(如小米、华为等)生产的手机出厂都会预置很多各自的apk,这些apk用户无法卸载删除(当然,rom厂商亦可以  开放权限允许用户卸载),如果我们有AOSP(android系统源码),如何预置app到系统中呢?主要有两种方式:1、先通过gradle编译出apk,将gradle放入aosp中进行images编译;2、将app源码直接放入aosp中进行images编译。这两种方式都大同小异,这里只介绍第二种方式。

    1、./packages/apps下创建文件夹,文件名随意(建议使用app工程名称),方便说明,此处取名DemoProject

    2、如果app有libs,将libs目录拷贝到DemoProject目录下;将res目录拷贝到DemoProject目录下;DemoProject目录下创建src文件夹,将app中com文件整个拷贝到src目录下;AndroidManifest.xml文件拷贝到DemoProject目录下,目录结构可以看下面第四步附图。

    3、编写Android.mk文件,举例如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := myokhttp myokio mygson

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_RESOURCE_DIR := \
    $(LOCAL_PATH)/res

LOCAL_PACKAGE_NAME := DemoProject

LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags

OCAL_PRIVILEGED_MODULE := true

LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

#####引用第三方jar包######
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
	myokhttp:libs/okhttp-3.10.0.jar \
	myokio:libs/okio-1.14.0.jar \
	mygson:libs/gson-2.3.1.jar

include $(BUILD_MULTI_PREBUILT)
##########################
include $(call all-makefiles-under,$(LOCAL_PATH))

    说明:

        1.jar包别名一一对应,下图中相同颜色一一对应,同时,注意jar包别名不要与aosp中已有的撞衫,比如取为okhttp,可以如我取为myokhttp等。

Android 程序源码集成到系统源码(预置应用程序)_第1张图片

        2.注意BUILD_MULTI_PREBUILT及LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES在BUILD_PACKAGE之后,如下图

    Android 程序源码集成到系统源码(预置应用程序)_第2张图片

        3.如有应用.so库,与jar包类似,可以网上查找参考,在此就不做说明(时间紧,老大在催着敲代码)

        4.如果app中使用的是远程依赖,我也不知道怎么搞,等以后有闲暇了再捣腾捣腾,希望有知道的朋友不吝赐教~

    4、如果需要对工程进行混淆,接下来就需要就需要编写proguard.flags文件了,你知道的,本人比较懒,老大没说混淆的事,so,本人就一直假装不知道,so,需要混淆的朋友只能去网上找咯~。

    到这里,apps下的工作算是做完了,此时目录结构如下(为方便看目录结构,直接用as查看):

Android 程序源码集成到系统源码(预置应用程序)_第3张图片

(不要在意最后那个External Libraries,AS自动加的东西)

    5、工程已经全部放入到aosp中并且Android.mk文件也编写完成了,接下来就剩最后一步,把工程参与到images的编译。./build/make/target/board/需要编译的版本(如x86_64)/devices.mk文件,找到PRODUCT_PACKAGES并添加如下:

Android 程序源码集成到系统源码(预置应用程序)_第4张图片

(注意这里的DemoProject必须与第三步编写Android.mk文件中LOCAL_PACKAGE_NAME := DemoProject一致,必须一致,建议第一步中apps中创建的任意文件名称时候也别太随意,保持与这里一致)。

    

    好了,到这里就可以开始make images咯~






你可能感兴趣的:(Android 程序源码集成到系统源码(预置应用程序))