常见问题

最近更新时间:2024-04-28 17:24:31

我的收藏

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=true
android.enableJetifier=true

1.2 模块化工程支持

开发者在模块化工程中多个模块同时使用了注解 @JsPlugin 或 @ProxyService 时 ,编译工程时会出现如下错误:



解决办法
1. 在每个使用了 @JsPlugin 或 @ProxyService 注解的 module 的 build.gradle 中添加如下代码:
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
//配置模块名:开发者自己定义唯一名称,模块名遵循android类名定义规范
arguments = [tcmppModuleName: "Demo"]
}
}
}
}
2. 初始化代码中注册模块:
@ProxyService(proxy = MiniConfigProxy.class)
public class MiniConfigProxyImpl extends MiniConfigProxy {
@Override
public MiniInitConfig buildConfig() {
MiniInitConfig.Builder builder = new MiniInitConfig.Builder();

//将上面定义的所有module都进行注册,registerModule参数值与上面tcmppModuleName定义的保持一致
return builder
.registerModule("Demo")
.registerModule("Test")
.build();
}
}
说明:
如果开发者只有一个模块使用了注解 @JsPlugin 或 @ProxyService,上面配置可以忽略,SDK 内部会有默认模块名。

1.3 常见编译错误

情况一

解决办法:
检查工程中是否有如下配置,如果有则去掉。
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:96250
at 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 校验

正式版小程序不支持跳过域名及 API 校验,如果想在开发测试阶段跳过校验,需打开非正式版 小程序调试(VConsole)

3. 如何判断初始化是否成功

使用打开小程序、扫码、搜索等小程序 API 后,SDK 内部会自动进行初始化,可通过 MINI_SHARK 过滤日志,确定初始化是否成功。
初始化成功会输出:shark init ok!



如果初始化失败会输出:shark init failed! 及具体错误原因。



初始化失败常见原因
原因一:配置文件路径错误,configAssetName 设置的是 assets 目录下文件的完整路径,如果配置文件在子目录下需要追加目录路径,例如:server/tcmpp-android-configurations.json。
原因二:不允许修改小程序配置文件内容,否则小程序无法正常运行。
原因三:配置文件中的 packageName 必须与应用的 applicationId 保持一致,否则 App 运行失败,因为初始化时会校验配置文件中的 packageName


此外,也可以通过如下设置不进行包名校验:
MiniInitConfig config = builder
.verifyPkg(false)//忽略包名校验
.build();
原因四:MiniConfigProxy 实现类未正确生成映射关系。
确定方法如下图:
1. 是否正常生成了 ExtProxyServiceScope。
2. ExtProxyServiceScope 中是否正常生成了 MiniConfigProxy 与实现类的映射关系。

未正确生成原因:
1. app module 是否正确依赖了mini_annotation_processor
kapt 'com.tencent.tcmpp.android:mini_annotation_processor:${version}'//版本信息请参考SDK 更新动态
2. MiniConfigProxy 实现类是否正确添加了@ProxyService 注解
@ProxyService(proxy = MiniConfigProxy.class)
public class MiniConfigProxyImpl extends MiniConfigProxy {
}

4. 小程序启动失败常见原因

小程序与 App 未建立绑定关系。
小程序与 App 建立绑定关系之后未发布版本。