前言
好久没记录了,最近项目想像微信支付宝一样在应用内支持自己小程序开发,网络上各种搜索各种查找,发现没几个平台提供了小程序容器框架,最后只确定了俩个平台。
第一个就是阿里云平台提供的mpaas 框架中的小程序容器
https://help.aliyun.com/document_detail/67441.html第二个就是凡泰极客提供的小程序功能
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,下面正式接入:
- 接入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()
}
}
- 接入小程序
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中配置
最后,在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的项目下的小程序,否则启动失败。