uni-app 华为nova3 启动闪退

uni-app 华为nova3 启动闪退

开发环境 版本号 项目创建方式
Windows 10 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.0.7

手机系统:Android

手机系统版本号:Android 8.1

手机厂商:华为

手机机型:nova3

页面类型:vue

打包方式:云端

App下载地址或H5网址:

https://www.liaoyitong.com/download

示例代码:

<script>  
import Vue from 'vue';  
import permision from "@/utils/uni-tools/permission.js"  
import {mapMutations, mapGetters} from 'vuex';  
export default {  
    onLaunch: function() {  
        console.log("App Launch");  
        const role = uni.getStorageSync('role')  
        if (role == 'doctor') {  
            uni.$TIM_READY = false;  
            uni.reLaunch({  
                url: '/pages/index/doctors-index'  
            })  
        }   
        uni.getSystemInfo({  
            success: e => {  
                Vue.prototype.statusHeight = e.statusBarHeight;  
                Vue.prototype.screenHeight = e.screenHeight;  
                // #ifdef H5  
                Vue.prototype.statusHeight += 25  
                // #endif  
            }  
        });  
        this.$tim.on(this.$TIM.EVENT.MESSAGE_RECEIVED, e => {  
            console.log(e.data);  
            if (Array.isArray(e.data)) {  
                e.data.forEach(msg => this.PUSH_MESSAGE(msg))  
            }  
        });  
        // #ifdef APP-PLUS  
        var jyrtc = uni.requireNativePlugin('JY-TXRTC');  
        jyrtc.initPlugin({  
            userid: '0zM8A3p42Oe3jDX'  
        }, result => {  
            console.log(JSON.stringify(result));  
            jyrtc.initSDK(result => {  
                jyrtc.registerFunc(res=>{   

                });  
            });  
        });  
        this.getPermission()  
        plus.push.addEventListener('click', (message) => {  
            const payload = message.payload;  
            if (payload) {  
                console.log(payload)  
                if (typeof payload.params === 'string') {  
                    const params = JSON.parse(payload.params);  
                    if (params.noticeType === 'order') {  
                        this.$store.commit('order/SET_DETAILS', {id: params.orderId})  
                        uni.navigateTo({  
                            url: '/pages/users/pay-success'  
                        })  
                    }  
                }  
            }  
        })  
        plus.push.addEventListener('receive', (message) => {  
            const content = JSON.parse(message.content)  
            console.log(content)  
            plus.push.createMessage(content.content)  
        }, true)  
        // #endif  
    },  
    onShow: function() {  
        console.log("App Show");  
    },  
    onHide: function() {  
        console.log("App Hide");  
    },  
    methods: {  
        ...mapMutations('chat', ['SET_CONV', 'SET_ME', 'PUSH_MESSAGE']),  
        async getPermission() {  
            return await new Promise(resolve => {  
                if (plus.os.name == 'iOS')  
                if (!permision.judgeIosPermission("camera") || !permision.judgeIosPermission("record")) {  
                    permision.gotoAppPermissionSetting()  
                } else {  
                    resolve(true)  
                }  
                if (plus.os.name == 'Android') {  
                    permision.requestAndroidPermission("android.permission.CAMERA").then(result => {  
                        if (result != 1) {  
                            uni.$toast('需要获取相机权限')  
                            setTimeout(()=>{  
                                permision.gotoAppPermissionSetting()  
                            }, 1500)  
                        } else {  
                            permision.requestAndroidPermission("android.permission.RECORD_AUDIO").then(result => {  
                                if (result != 1) {  
                                    uni.$toast('需要获取麦克风权限')  
                                    setTimeout(()=>{  
                                        permision.gotoAppPermissionSetting()  
                                    }, 1500)  
                                } else {  
                                    resolve(true)  
                                }  
                            })  
                        }  
                    })  
                }  
            })  
        },  
    }  
};  
</script>  

<style>  
</style>

操作步骤:

  • 使用华为nova3手机打开

预期结果:

  • 可以正常进入,与其他机型一致

实际结果:

  • 开屏闪退

bug描述:

启动APP时闪退
开发者后台可以看到崩溃日志
崩溃日志:

2021/03/26 13:23:00 [crash] imei:9A3039AE7F5656C35FEA421CFC0059B5 md:PAR-AL00 p:a os:28 net:3 vb:1.9.9.80630 mc: appid:UNI11F6057 appcount:1 wvcount:2 pn:com.liaoyitong.inquiry mem:5776kb etype:1 eurl: carsh_info:com.alibaba.fastjson.JSONException: syntax error, pos 1
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1261)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1171)
at com.alibaba.fastjson.JSON.parse(JSON.java:104)
at com.alibaba.fastjson.JSON.parse(JSON.java:95)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:135)
at com.jiyi.jy_txrtc.JY_TXRTC$1$1.onResponse(JY_TXRTC.java:90)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)

更多关于uni-app 华为nova3 启动闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

问题出在JY_TXRTC 应该是uni原生插件.与插件作者反馈下

更多关于uni-app 华为nova3 启动闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据崩溃日志分析,闪退问题出现在JY-TXRTC原生插件初始化过程中。崩溃堆栈显示:

com.alibaba.fastjson.JSONException: syntax error, pos 1
at com.jiyi.jy_txrtc.JY_TXRTC$1$1.onResponse(JY_TXRTC.java:90)

这表明插件在解析JSON响应时遇到语法错误,位置在字符串的第一个字符。问题可能源于:

  1. 网络请求返回数据格式异常 - JY-TXRTC插件初始化时向服务器发送请求,但返回的数据不是有效的JSON格式,可能是空字符串、HTML错误页面或其他非JSON数据。

  2. 插件配置参数问题 - 传入的userid参数'0zM8A3p42Oe3jDX'可能包含特殊字符或格式不符合服务器预期。

解决方案:

  1. 检查网络环境 - 确保设备网络连接正常,服务器接口可正常响应。

  2. 验证插件配置 - 确认userid参数格式正确,联系插件提供商确认参数要求。

  3. 添加错误处理 - 在插件初始化代码外包裹try-catch块:

jyrtc.initPlugin({
    userid: '0zM8A3p42Oe3jDX'
}, result => {
    console.log(JSON.stringify(result));
    try {
        jyrtc.initSDK(result => {
            jyrtc.registerFunc(res=>{   
                // 处理逻辑
            });
        });
    } catch(e) {
        console.error('JY-TXRTC初始化失败:', e);
    }
});
回到顶部