uni-app 2.8.8升级到3.1.2版本后 widget方式离线打包运行未正常加载webview
uni-app 2.8.8升级到3.1.2版本后 widget方式离线打包运行未正常加载webview
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:windows10
HBuilderX类型:正式
HBuilderX版本号:3.1.2
手机系统:Android
手机系统版本号:Android 11
手机厂商:小米
手机机型:小米10
页面类型:vue
打包方式:离线
项目创建方式:HBuilderX
操作步骤:
- 在android10以内可以正常打开的widget方式集成uni-app示例
- 将libs替换为3.1.2版本SDK中对应的libs,并且替换assets内资源为HX3.1.2版本生成的资源包
- 运行
预期结果:
- 加载webview,正常运行
实际结果:
- 未加载webview,无法正常运行
bug描述: 使用widget方式集成:
- 2.8.8版本下正常,但是在android11上白屏。
- 分别尝试升级到3.0.7和3.1.2,相同的lib已经替换掉,也移除了gallery包,使用对应版本HX打出来的资源也替换了,试了Android10的三星note9和android11的小米10,运行后均直接白屏,根据断点判断SDK.startWebApp的相关回调甚至没有执行,webview未添加到页面中
SDK.startWebApp(activity, appBasePath, args, new IWebviewStateListener() {
// 设置Webview事件监听,可在监监听内获取WebIvew加载内容的进度
@Override
public Object onCallBack(int pType, Object pArgs) {
switch (pType) {
case IWebviewStateListener.ON_WEBVIEW_READY:
// WebApp准备加载事件
// 准备完毕之后添加webview到显示父View中,
// 设置排版不显示状态,避免显示webview时html内容排版错乱问题
View view = ((IWebview) pArgs).obtainApp().obtainWebAppRootView().obtainMainView();
view.setVisibility(View.INVISIBLE);
if (view.getParent() != null) {
((ViewGroup) view.getParent()).removeView(view);
}
rootView.addView(view, 0);
break;
}
})
更多关于uni-app 2.8.8升级到3.1.2版本后 widget方式离线打包运行未正常加载webview的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 2.8.8升级到3.1.2版本后 widget方式离线打包运行未正常加载webview的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个在uni-app 3.x版本中常见的widget集成问题。主要原因可能是:
- 3.x版本对Android 11的适配问题,需要确保AndroidManifest.xml中添加了正确的文件访问权限:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
-
检查assets/data/dcloud_control.xml文件是否正确配置,特别是appid和版本号需要与打包配置一致。
-
确认是否移除了所有旧版本依赖,包括:
- 删除libs下的所有旧aar文件
- 确保build.gradle中只引用了最新版本的uni-app SDK
- 尝试在Application初始化时添加:
UniSDKEngine.init(this, new UniSDKEngine.OnSDKEngineListener() {
@Override
public void onInitFinished(boolean b) {
// 初始化完成回调
}
});
- 检查webview初始化是否被阻塞,可以在startWebApp前添加:
WebView.setWebContentsDebuggingEnabled(true);