V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jione
V2EX  ›  Android

问下各位 Android 大佬, 为什么两个 android App 执行同一个 js,执行结果不同!

  •  
  •   Jione · 2021-10-16 10:52:15 +08:00 · 10650 次点击
    这是一个创建于 1168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问下各位 Android 大佬, 为什么两个 android App 执行同一个 js,执行结果不同! 我用手机浏览器画的 canvas 转 base64 用 A app 执行 js 画 canvas 转 base64 没问题和浏览器画的一致 用 B app 执行 js 画 canvas 转 base64 和浏览器不一致

    执行 js 是用的同样的代码!

    17 条回复    2021-10-18 10:28:28 +08:00
    Jione
        1
    Jione  
    OP
       2021-10-16 10:52:52 +08:00
    问下各位 Android 大佬, 为什么两个 android App 执行同一个 js,执行结果不同!
    我用手机浏览器画的 canvas 转 base64
    用 A app 执行 js 画 canvas 转 base64 没问题和浏览器画的一致
    用 B app 执行 js 画 canvas 转 base64 和浏览器不一致

    执行 js 是用的同样的代码!
    fugui2
        2
    fugui2  
       2021-10-16 11:14:00 +08:00
    show your code
    Jione
        3
    Jione  
    OP
       2021-10-16 13:43:36 +08:00
    @fugui2 应该不是 js 代码和调用 js 的这个代码问题吧,
    MonkeyD1
        4
    MonkeyD1  
       2021-10-16 14:23:02 +08:00
    webview 的内核版本不同? webkit 版本内核 之类的
    InDom
        5
    InDom  
       2021-10-16 14:35:22 +08:00
    之前有个 利用 Canvas 画板计算用户指纹来识别跟踪用户。
    Jione
        6
    Jione  
    OP
       2021-10-16 15:08:19 +08:00
    @MonkeyD1 都对比了是一样的
    Jione
        7
    Jione  
    OP
       2021-10-16 15:09:01 +08:00
    @InDom 对我是正在做这个,但是不知道两个同样的 app 执行两个同样的代码结果不一样
    stardust21
        8
    stardust21  
       2021-10-16 16:26:03 +08:00
    原因应该就是 4 楼说的,不同的 APP 用了不同的 webview 内核
    deplivesb
        9
    deplivesb  
       2021-10-16 16:43:57 +08:00   ❤️ 3
    到现在也没见到代码,全靠广大网友猜
    又一个悬丝诊脉
    damao2250
        10
    damao2250  
       2021-10-16 17:48:35 +08:00
    悬丝诊脉
    Jione
        11
    Jione  
    OP
       2021-10-16 18:22:34 +08:00
    @stardust21 两个 app 的运行 js 代码
    String js = "";
    try {
    InputStream is = null;
    is = getAssets().open("main.js");
    int size = is.available();
    byte[] buffer = new byte[size];
    is.read(buffer);
    is.close();
    js = new String(buffer);

    } catch (IOException e) {
    e.printStackTrace();
    }
    JsEvaluator jsEvaluator = new JsEvaluator(this);

    jsEvaluator.callFunction(js,
    new JsCallback() {
    @Override
    public void onResult(String result) {
    // Process result here.
    // This method is called in the UI thread.
    MyLog.loge("result:"+result);
    MyLog.log("md5:" + md5(result));
    }
    @Override
    public void onError(String errorMessage) {
    MyLog.log("errorMessage:" + errorMessage);

    // Process JavaScript error here.
    // This method is called in the UI thread.
    }
    }, "webglFp");
    Jione
        12
    Jione  
    OP
       2021-10-16 18:22:47 +08:00
    @deplivesb 代码已发
    WebKit
        13
    WebKit  
       2021-10-17 02:01:13 +08:00 via Android
    手机版本?还是说同一个手机装的两个 app ?如果是国内的 app,可以试试卸载腾讯系软件,然后卸载重装这两个 app 试试
    ruri
        14
    ruri  
       2021-10-17 08:47:52 +08:00
    webview 你就别指望不同设备执行结果会一样了,这也是为什么现在很多 APP 会集成腾讯 x5 的主要原因,就是为了让自己的 APP 在每个设备上运行结果相同,减少开发调试精力。
    其实较新版本的谷歌官方或 AOSP webview 都没什么毛病,但你架不住有些国内厂商会魔改自己手机系统里的 webview,哪怕是微调一些 webview 的默认参数,都会导致你的代码运行效果和原版大不一样。
    lisongeee
        15
    lisongeee  
       2021-10-17 16:07:37 +08:00
    @Jione 你发的是 java 代码,还有 js 代码呢?
    zoharSoul
        16
    zoharSoul  
       2021-10-17 18:41:51 +08:00
    @Jione 要的是 js 代码, Java 代码有啥好看的
    Jione
        17
    Jione  
    OP
       2021-10-18 10:28:28 +08:00
    @ruri 两个 app 都是我自己的 app ,没有集成其他内核
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:21 · PVG 06:21 · LAX 14:21 · JFK 17:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.