多包的实现技术方案

2018-12-04  本文已影响35人  747a945a4501

1. 包名 & icon等一些应用级别的配置

通过配置Gradle来实现这样的多包

productFlavors {
        zhuoShiXiong {
            applicationId "com.example.app1"
            resValue "string", "app_name", "包名1"
            buildConfigField "string", "WX_ID", '"wx999999999999999"'
            buildConfigField "string", "APP_SECRET", '"00dsadsadsadae"'
            manifestPlaceholders = [
                    app_name:"APP名称1",
                    app_icon:"@mipmap/zsx"
            ]
        }
        wxHuiFu {
            applicationId "com.example.app2"
            resValue "string", "app_name", "包名2"
            buildConfigField "string", "WX_ID", '"wx999999999999999"'
            buildConfigField "string", "APP_SECRET", '"00dsadsadsadae"'
            manifestPlaceholders = [
                    app_name:"APP名称2",
                    app_icon:"@mipmap/wx_huifu"
            ]
        }
    }

清单文件的配置如下,文件路径名全部改为绝对路径

<application
    android:icon="${app_icon}"
    android:label="@string/app_name"
     android:name="com.company.aaa.MyApplication"
    >
    <activity
            android:name="com.company.aaa.Activities.Startup.HelpActivity" />
    <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
    .....
</application>

2. 第三方和包名相关的配置

支付宝支付

支付宝无论是H5支付还是V2支付方式,客户端均不需要配置。后台的支付回调参数需要根据不同app的请求,返回对应的支付请求参数。

微信支付和微信登录

微信需要在Application入口,注册APP_ID和APP_SECRET,通过gradle文件配置方式,来实现多包变化。方法见第一条的配置Demo。后台的支付回调参数同支付宝一样,需要变化。

埋点

神策没有对包名有依赖,需要的渠道名也是通过签名工具注入清单文件,无需额外配置。

3. 资源文件的分发

资源文件涉及到皮肤概念,但是分包的皮肤不会有额外的动态换肤功能。所以不通过切换上下文来实现换肤的方式。而是通过配置皮肤主题管理器来实现资源分发。
代码和资源是放在同一个工程里面,这样带来的好处,代码及共用的资源可以在一起,不必维护多次。通过分包打包的方式,可以避免资源放在一起增加包容量大小的问题。
这里的资源包括:图片,颜色,字体大小,样式等等

原加载资源的方式:

image.png
现在加载方式通过SkinManager做分发
image.png

4. 布局或者应用流程变化

因为分包设计没有一定标准化的东西,所以没办法做碎片化。所以针对布局或者流程变化我们会重新开辟新的页面。然后跳转通过路由的方式调整。


image.png

混淆 加固 打包等方式都不需要改变。

通过实践总结,除去具体的分包业务需求改变外,还需要修改的地方有:

  1. 支付宝和微信的支付配置信息的修改,后台接口支持多包的支付参数返回
  2. 版本检测接口需要支持多包
  3. 如果用户是独立的,那所有和用户相关的接口都需要支持多包。
上一篇 下一篇

猜你喜欢

热点阅读