自动集成APK

本文介绍了在手机产品开发中,通过脚本自动化集成APK到系统的方法,以提高开发效率。该方法包括解析APK提取SO文件、自动生成Android.mk文件和更新PRODUCT_PACKAGES宏,适用于不同安装路径的应用集成。
摘要由CSDN通过智能技术生成

自动集成APK

一 背景

    在手机产品开发过程中,会涉及到很多第三方应用的集成问题,有些应用需要集成到system区,有些应用需要集成到data区。传统的开发方式是需要系统工程师将APK解包,取出其中的so文件和APK文件一起添加到源码下的某一目录,并建立Android.mk文件,将APK和每个so文件各作为一个添加项写进Android.mk文件,如集成一个PhicommCamera应用需要添加的Android.mk文件内容如下:

include $(CLEAR_VARS)

    LOCAL_APK := FxCamera_20150113

    LOCAL_MODULE := PhicommCamera

    LOCAL_MODULE_TAGS := optional

    LOCAL_SRC_FILES := $(LOCAL_APK).apk

    LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)

    LOCAL_MODULE_CLASS := APPS

    LOCAL_MODULE_SUFFIX:=(COMMON_ANDROID_PACKAGE_SUFFIX)

    LOCAL_CERTIFICATE := PRESIGNED

    LOCAL_REQUIRED_MODULES := \

                 libjni_mosaic \

                   liblocSDK4b \

    include $(BUILD_PREBUILT)

    include $(CLEAR_VARS)

    LOCAL_PREBUILT_LIBS := libjni_mosaic.so

    LOCAL_MODULE_TAGS := optional

    include $(BUILD_MULTI_PREBUILT)

    include $(CLEAR_VARS)

    LOCAL_PREBUILT_LIBS := liblocSDK4b.so

    LOCAL_MODULE_TAGS := optional

    include $(BUILD_MULTI_PREBUILT)

    以上的每一行都需要系统工程师手动添加,如果集成应用过多或者有些应用里的SO文件过多,如一个微信应用包含几十个so文件,工程师一项项的添加会浪费大量的时间和精力,而且很容易出错,而且内置的应用又会经常升级,每一个版本都需要重写Android.mk。

   针对以上这些缺点,在我公司P680项目的开发过程中,采用一种自动添加应用和库文件到系统的方法,大大提高开发效率。

 

二 具体内容

    通过脚本程序对几个特定目录下的APK解析,提取其中包含的SO文件到另一临时目录的对应文件夹下,该对应文件夹以APK名字命名,用以临时保存该PAK包含的SO文件,这几个特定目录中的APK对应安装到不同的区域。再通过另外一个脚本遍历这几个特定目录,在每个目录下生成Android.mk文件,最后通过另外一个脚本将每个APK和每个so文件添加系统宏PRODUCT_PACKAGES中,在接下来的make命令中会将这些应用编译进软件版本中。

 

三 详细阐述

     本套方案分为32位应用的内置和64位的应用内置,以下以内置32位应用来阐述。

在编译软件时,增加一个预编译命令,具体的操作就是在make之前运行device/qcom/msm8994/prebuilts/apps-32目录下的prebuilt_mk.sh脚本,该脚本的主要功能有三个:

1,进入到五个特定目录,提取每个apk所包含的so文件。 各目录对应的apk和so文件的安装路径不同,介绍如下:

     data_app目录下apk对应安装到data/app,为便于产线生产测试,该路径下应用在默认保存到system区,在恢复出厂设置时复制到data/app,系统启动时候会解析安装。

system_app_platform目录下应用对应安装到system/app,采用系统签名。

system_app_presigned目录下应用对应安装到system/app,应用自签名。

system_priv-app目录下应用安装到system/priv-app,应用自签名。

   system_app_presigned_lib目录下应用安装到 system/app下,应用自签名,该目录下应用所包含的so 文件将编译到system/lib/下。

解析以上五个目录下的每一个APK,提取每个APK中的so文件到临时目录temp_lib下相应文件夹中。如应用Camera360_v7.0.1.apk的so文件对应的路径为temp_lib/Camera360_v7.0.1/。

2,运行以上五个目录下的appmk.sh脚本,生成每个目录下的Android.mk文件。如 system_app_presigned目录下集成FxSecurity_2.0.2.20.apk,对应生成Android.mk中的项如下:

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE := FxSecurity_2.0.2.20

LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)

LOCAL_SRC_FILES := FxSecurity_2.0.2.20.apk

LOCAL_PREBUILT_JNI_LIBS := ../temp_lib/FxSecurity_2.0.2.20/libconceal.so ../temp_lib/FxSecurity_2.0.2.20/libcryptox.so../temp_lib/FxSecurity_2.0.2.20/libImageBlur.so

LOCAL_MULTILIB := 32

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_DEX_PREOPT := false

include $(BUILD_PREBUILT)

3,运行productmk.sh脚本,该脚本遍历以下几个目录:

'data_app' 

'system_app_platform' 

'system_app_presigned''system_priv-app' 

'pre_add_jar'

 'pre_add_xml'

 'system_app_presigned_lib'。生成PrebuiltProduct.mk文件,该mk文件的作用是将所有的apk,额外的so文件,XML文件,jar文件加入到系统宏PRODUCT_PACKAGES中,以便在make时能将这些APK和SO文件编译到系统。PrebuiltProduct.mk文件内容的一个例子如下:

PRODUCT_PACKAGES += \

   Camera360_v7.0.1.apk\

   ctrip_1047_4066_1.apk\

    libjni_blur.so \

   network_mode_config.xml\

 四  流程图

   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值