weixin_39624606
weixin_39624606
2021-01-05 22:41

在安卓Arm64机器上出现卡死

自己的基于tolua的项目,打arm64v8包在安卓64手机运行时,发现在加载场景或频繁开关一个UI,有大概率会卡死,但是同一个包在其他非安卓64手机运行时从未发生过卡死。

现已找到了100%复现的方法,从tolua的示例代码就可以复现:

环境为win10系统,Unity2017.4.28 或 2018.4.1,手机为小米黑鲨2和小米mix2。 下载最新的tolua-master,打开例子21TestString,修改TestString.cs脚本,在第21行的string后面添加以下lua代码,然后只打包例子21,il2cpp + arm64 + armv7,在安卓64位手机上即可复现,32位手机一切正常。

    function concatStrs(...)
        return table.concat({ ... })
    end

    function cov2ABName(one, prefix)
        if not one then
            return ''
        end

        if not prefix then
            prefix = 'assets/assetbundles/'
        end

        local suffix = one:match('.+%.(%w+)$')

        if not suffix then
            one = concatStrs(prefix, one, '.prefab')
        else
            one = concatStrs(prefix, one)
        end

        return one
    end

    local cov2ABName = cov2ABName
    for i = 1, 1000 do
        local name = 'ui/common/ui_message.prefab'
        name = cov2ABName(name)
        _G['MS'..i] = 80000+i
        --print(i)

        if i % 1000 == 0 then
            print(string.format('[%s]----%s', i, 'i'))
        end
    end

    print(string.format('[%s]----%s', 777777, 'cccccccccbbbbbbbaaaaaaaa'))

最后附上真机报错log crashLog.txt

该提问来源于开源项目:topameng/tolua

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • weixin_39684995 weixin_39684995 3月前

    在华为mate20机子上,无法复现 截图: 微信图片_20190617165002 工程:

    tolua.zip 环境:Unity2018.3.7f1

    点赞 评论 复制链接分享
  • weixin_39624606 weixin_39624606 3月前

    在华为mate20机子上,无法复现 截图: 微信图片_20190617165002 工程:

    tolua.zip 环境:Unity2018.3.7f1

    我交下我的cs文件、apk和setting截图。如果还不能复现,可以调大for循环次数,比如100000。这里面的apk是基于2018打的,不是卡死,是闪退。看看在华为的手机上怎么样,我这里目前只有俩小米,黑鲨2是安卓9,mix2是安卓8。 报错文件.zip

    点赞 评论 复制链接分享
  • weixin_39684995 weixin_39684995 3月前

    你先关掉jit看看

    点赞 评论 复制链接分享
  • weixin_39684995 weixin_39684995 3月前

    加群286510803,好交流点,问我先试试你的工程,你的apk

    点赞 评论 复制链接分享
  • weixin_39624606 weixin_39624606 3月前

    加群286510803,好交流点,问我先试试你的工程,你的apk

    嗯,我在群里,明天吧,今天不在公司,没真机。

    点赞 评论 复制链接分享
  • weixin_39684995 weixin_39684995 3月前

    手动关闭luajit的jit模式可解决:jit.off(); jit.flush()

    点赞 评论 复制链接分享
  • weixin_39624606 weixin_39624606 3月前

    jit.off(); jit.flush() 可解决。

    点赞 评论 复制链接分享