阿里云mpaas小程序框架接入流程和遇见的问题-umcrash依

2021-08-23  本文已影响0人  Alden_Lei

前言

好久没记录了,最近项目想像微信支付宝一样在应用内支持自己小程序开发,网络上各种搜索各种查找,发现没几个平台提供了小程序容器框架,最后只确定了俩个平台。

  1. 第一个就是阿里云平台提供的mpaas 框架中的小程序容器
    https://help.aliyun.com/document_detail/67441.html

  2. 第二个就是凡泰极客提供的小程序功能
    https://www.finclip.com/mop/document/

技术选择

以上俩个平台各有优缺点

平台 优势 劣势
阿里云mpaas 大平台,生态圈完善(小程序开发完善(各种UI框架),mpaas控制台动态下发更新小程序) 接入复杂,包体积增大至少20M
凡泰极客 文档简单,接入简单 小公司,生态圈不完善,小程序代码翻版微信小程序

基于以上,各种对比后,当然最后还是要管理拍板,更加倾向于阿里云,无他,更加信任大厂,还是就是凡泰的小程序不知道有没有未知的风险,因为凡泰小程序代码和微信小程序代码命名基本一致。

下面进入重点,接入mpaas的踩坑过程,因为阿里云的文档实在是感觉太混乱了,而且相对复杂,最终耗费好久才接入成功。插一句,如果要接入有问题可以加官方钉钉群:32843812(ps:群里有技术人员回复,比工单快,然而仅限于让你参考xx文档,不够有人回答总比没人好)

接入小程序框架流程如下:
接入前提:gradle版本4.0.0,gradle-6.5-all.zip, mpass项目对gradle版本有要求,7.0版本编译各种问题,建议大家使用4.0.0,AndroidStudio安不安装mpaas插件都没关系,不安装按照下面流程也没问题! mpaas后台那套配置按照他的文档就可以,https://help.aliyun.com/document_detail/67839.html,重点提一下,mpaas后台包名和开发要一致,UC内核申请签名要一致

项目build.gradle文件下设置

 dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
}

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip

ok,下面正式接入:

  1. 接入mpaas ,总共三种方式,官方建议使用aar方式接入,确实这种方式最简单方便,项目build.gradle文件下设置:
apply plugin: 'com.alipay.apollo.optimize'
buildscript {
    ext.mpaas_artifact = "mpaas-baseline"
    ext.mpaas_baseline = "10.1.68-34"

    repositories {
        google()
        jcenter()
        maven {
            url 'https://mvn.cloud.alipay.com/nexus/content/repositories/releases/'
            name 'alipay'
            credentials {
                username 'mvn_read_ws'
                password 'mrk8929'
            }
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
        classpath 'com.android.boost.easyconfig:easyconfig:2.5.9'
    }
}
allprojects {
    repositories {
        maven {
            url 'https://mvn.cloud.alipay.com/nexus/content/repositories/releases/'
            name 'alipay'
            credentials {
                username 'mvn_read_ws'
                password 'mrk8929'
            }
        }
        google()
        jcenter()
    }
}


  1. 接入小程序
    app module下的gradle文件新增:
apply plugin: 'com.alipay.apollo.baseline.config'


dependencies {
    // mPaaS 基线
    api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")
    // 小程序
    api 'com.mpaas.android:tinyapp'
}

因为接入小程序后整个项目打包体积大概增加50M,主要是因为使用了UC内核,所以为了优化体积,只考虑armeabi-v7a(如果某些手机发生不兼容奔溃问题,考虑是不是自己选择的armeabi架构),这样大概节约30M体积。


android {

    defaultConfig {

        ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi-v7a'
        }
}
}

添加mpaas混淆,混淆文件是从扫码demo拿来的,它自己的小程序demo没有。https://github.com/mpaas-demo/android-scan/blob/master/app/mpProguard.cfg

  buildTypes {
        release {
            minifyEnabled true
           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro','mpProguard.cfg'
        }

将从后台下载的配置文件Ant-mpaas-xxx-default-Android.config放在app module根目录下,
custom_config.json配置文件放在assets下的config文件夹中,
AndroidManifest.xml中配置

        <meta-data
            android:name="nebula.android.meta.enable"
            android:value="true" />
        <meta-data
            android:name="UCSDKAppKey"
            android:value="24d6uLLNOnAjjc2hzj0XGDztOyyncPI8JDNTIHPf5OKFg4sLuyAYuXqJkn0L8oxfP8SDKt9+R0c9QX7CK9iogw==" />
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
mpaas微信截图_20210823094116.png

最后,在appication中初始化:

public class MyApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        // mPaaS 初始化回调设置
        QuinoxlessFramework.setup(this, new IInitCallback() {
            @Override
            public void onPostInit() {
                // 初始化小程序公共资源包
                H5Utils.setProvider(H5AppCenterPresetProvider.class.getName(),new TinyAppCenterPresetProvider());

            }
        });

    }
    @Override
    public void onCreate() {
        super.onCreate();
        // mPaaS 初始化
        QuinoxlessFramework.init();
    }
}

在页面中启动小程序:

    MPNebula.startApp("12313131231231231")

遇见的问题

1.依赖冲突:因为阿里云mpaas会引入很多第三方依赖,比如高德地图,utdid等,具体解决见文档:https://help.aliyun.com/document_detail/164960.html
然而,mpaas和友盟(api 'com.umeng.umsdk:apm:1.4.1')的冲突阿里云文档上是没有解决方案的,具体冲突是因为异常那块都引入了,解决方案如下:
下载umeng apm的aar文件,下载地址:https://developer.umeng.com/sdk/android ,选择 应用性能监控 SDK下载,下载后修改umeng-apm-armeabi-v1.4.2.aar的后缀为zip解压,删除其中libs目录下的的crashsdk-3.3.0.0-umeng.jar以及jni目录下的libcrashsdk.so文件,然后整体再压缩打包修改后缀为aar,引入本地aar替换api 'com.umeng.umsdk:apm:1.4.2' 依赖,解决umcrash冲突完成。

2.mpaas控制台的包名一定要和本地引入mpaas项目的一致,而且一定要在相同包名路径的module引入mpaas和小程序,否则会导致各种问题,比如启动奔溃,报错invoke logger xxx等等。还有就是小程序一定要使用自己mpaas的项目下的小程序,否则启动失败。

上一篇下一篇

猜你喜欢

热点阅读