1. 集成相关
1.1 android.support 与 AndroidX 冲突问题
TCMPP SDK 依赖了 AndroidX,客户在接入过程中可能会遇到与 android.support 相关冲突,遇到类似错误:
Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.3.1-runtime (androidx.core:core:1.3.1) and support-v4-21.0.3-runtime (com.android.support:support-v4:21.0.3)
解决办法:
在 gradle.properties 中添加如下属性。
android.useAndroidX=trueandroid.enableJetifier=true
1.2 模块化工程支持
开发者在模块化工程中多个模块同时使用了注解 @JsPlugin 或 @ProxyService 时 ,编译工程时会出现如下错误:
![](https://qcloudimg.tencent-cloud.cn/image/document/83e4aa05ce63cd3e11f2a7461fd78b67.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/83e4aa05ce63cd3e11f2a7461fd78b67.png)
解决办法:
1. 在每个使用了 @JsPlugin 或 @ProxyService 注解的 module 的 build.gradle 中添加如下代码:
android {defaultConfig {javaCompileOptions {annotationProcessorOptions {//配置模块名:开发者自己定义唯一名称,模块名遵循android类名定义规范arguments = [tcmppModuleName: "Demo"]}}}}
2. 初始化代码中注册模块:
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {@Overridepublic MiniInitConfig buildConfig() {MiniInitConfig.Builder builder = new MiniInitConfig.Builder();//将上面定义的所有module都进行注册,registerModule参数值与上面tcmppModuleName定义的保持一致return builder.registerModule("Demo").registerModule("Test").build();}}
说明:
如果开发者只有一个模块使用了注解 @JsPlugin 或 @ProxyService,上面配置可以忽略,SDK 内部会有默认模块名。
1.3 常见编译错误
情况一
![](https://qcloudimg.tencent-cloud.cn/image/document/72619e756674220031498715fe67f2b1.png)
解决办法:
检查工程中是否有如下配置,如果有则去掉。
kapt.include.compile.classpath=false
1.4 Taro框架支持相关
使用 Taro 框架开发的小程序, 启动时逻辑线程可能报如下错误:
Uncaught DOMException: Failed to read the 'sessionStorage' property from 'Window': Access is denied for this document.at <anonymous>:1207:96250at Array.forEach (<anonymous>)at Module.<anonymous> (<anonymous>:1207:96164)at Module.9 (<anonymous>:1207:113782)at l (<anonymous>:1203:566)at Module.204 (<anonymous>:1215:87806)at l (<anonymous>:1203:566)at t (<anonymous>:1203:435)at Array.r [as push] (<anonymous>:1203:298)at <anonymous>:1215:125
解决办法:
Taro 框架开发的小程序,部分特性需依赖 v8 扩展库,请在 app build.gradle 中添加如下依赖。
implementation 'com.tencent.tcmpp.android:mini_extra_v8:${version}'
2. 如何跳过小程序域名和隐私 API 校验
3. 如何判断初始化是否成功
使用打开小程序、扫码、搜索等小程序 API 后,SDK 内部会自动进行初始化,可通过 MINI_SHARK 过滤日志,确定初始化是否成功。
初始化成功会输出:shark init ok!
![](https://qcloudimg.tencent-cloud.cn/image/document/a4d6db81d02fa7dd5566ccd05f57b942.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/a4d6db81d02fa7dd5566ccd05f57b942.png)
如果初始化失败会输出:shark init failed! 及具体错误原因。
![](https://qcloudimg.tencent-cloud.cn/image/document/9bb2d031cd10acee58f1f72f9f215b9a.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/9bb2d031cd10acee58f1f72f9f215b9a.png)
初始化失败常见原因
原因一:配置文件路径错误,configAssetName 设置的是 assets 目录下文件的完整路径,如果配置文件在子目录下需要追加目录路径,例如:server/tcmpp-android-configurations.json。
原因二:不允许修改小程序配置文件内容,否则小程序无法正常运行。
原因三:配置文件中的 packageName 必须与应用的 applicationId 保持一致,否则 App 运行失败,因为初始化时会校验配置文件中的 packageName,
![](https://qcloudimg.tencent-cloud.cn/image/document/5cc6bbbf22f9262faeae18c229780980.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/aecdf54326197c5b6c20bb059b6e9a1d.png)
此外,也可以通过如下设置不进行包名校验:
MiniInitConfig config = builder.verifyPkg(false)//忽略包名校验.build();
原因四:MiniConfigProxy 实现类未正确生成映射关系。
确定方法如下图:
1. 是否正常生成了 ExtProxyServiceScope。
2. ExtProxyServiceScope 中是否正常生成了 MiniConfigProxy 与实现类的映射关系。
![](https://qcloudimg.tencent-cloud.cn/image/document/b701ebf396a1cc9c9d877f6916bfea4f.png)
未正确生成原因:
1. app module 是否正确依赖了mini_annotation_processor
2. MiniConfigProxy 实现类是否正确添加了@ProxyService 注解
@ProxyService(proxy = MiniConfigProxy.class)public class MiniConfigProxyImpl extends MiniConfigProxy {}
4. 小程序启动失败常见原因
小程序与 App 未建立绑定关系。
小程序与 App 建立绑定关系之后未发布版本。