两个apk打包成一个apk发布

一、简介


       前段时间miui6隆重发布,感觉很不错的样子。由于自己没用小米手机,所以要是尝鲜miui6只能使用别的方法,这个时候在应用商店看到了"小米系统"这个应用,下载下来后看到这个应用是miui的一个轻装版本,一个apk里面打包了如下基础应用:桌面、锁屏、通讯模块(短信、拨号盘、联系人)、云服务、应用商店,看到这种模式以后不得不对小米互联网产品思维表示佩服,单单91助手上下载量500k+,有了这种便捷的推广方法,估计小米现在已经懒得再去折腾最早弄的比较复杂的patchrom项目了。

    其实这种apk合并的方式并不是很难,我尝试了写了一个demo,下面简单介绍一下思路。


    两个apk打包成一个apk发布_第1张图片

二、打包方法


         Demo中包括两个工程,MainApplication和SecondaryApplication,现在准备把SecondaryApplication打包到MainApplication中,生成一个MainApplication.apk,apk安装后桌面上仍然存在两个工程主activity的入口。

    2.1 eclipse工具打包方法


      1.首先将SecondaryApplication工程下AndroidManifest.xml里面的<application></application>子标签里面的activity、service等元素全部提到MainApplication工程里面的AndroidManifest.xml里。
    2.将SecondaryApplication设定为Is Library为true,路径是:右键-properties-android。
    3.MainApplication工程设置:右键-properties-android-Add SecondaryApplication工程。
        

    2.2 mk脚本打包方法

        
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

secondaryapp_dir := ../SecondaryApplication

src_dirs := src  $(secondaryapp_dir)/src
#src_dirs := src
res_dirs := res  $(secondaryapp_dir)/res

#LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES := $(call all-java-files-under,  $(src_dirs))
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))

LOCAL_AAPT_FLAGS := \
    --auto-add-overlay \
    --extra-packages com.example.secondaryapplication


LOCAL_PACKAGE_NAME := mainapplication

include $(BUILD_PACKAGE)

# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))

       2.3 多进程还是单进程


          小米系统apk打包了这么多的应用,如果都运行在同一个进程肯定会使得这个进程负担很重,所以这些应用虽然呈现形式是一个apk,但是实际上是分别运行在不同的进程里面的。现在所有应用的activity、service等组件都配置在了一个AndroidManifest.xml文件中,决定activity、服务运行运行在不同进程的方法也很简单,配置这个属性就可以了:
     
android:process="com.example.secondaryapplication"
这个选项是可配置的,如果期望两个应用运行在同一个进程中,直接忽略这个属性即可。

      2.4.Application怎么处理


      每一个android工程都可以存在一个Application类,通常是用来初始化应用的一些数据。假设两个工程都存在一个Application类,第一种情况:两个工程配置运行在同一个进程中,这种方式处理很简单,只需要将两个工程的初始化动作都放到主工程的Application类中即可;第二种情况:两个工程配置分别运行在不同的进程中,这个时候就比较麻烦了,得视具体情况看能不能修改相关初始化动作放到Activity中,这个你可以再思考一下。

 DEMO工程下载

你可能感兴趣的:(两个apk打包成一个apk发布)