使用代码混淆工具打包apk后,运行黑屏

  • Creator 版本:2.3.2
  • 目标平台:Android
  • NDK版本:r20b
  • Gradle版本:5.1.1

使用这款代码混淆工具
构建、编译都正常,但打包出来的apk拿到模拟器测试,打开就黑屏,毫无动静。


就算参数能关的全关,也是一样黑屏。
而不用代码混淆工具的话,项目是正常的,能够正常运行 。

以下是AndroidStuido的报错:

    E/jswrapper: ScriptEngine::evalString script src/project.js, failed!
        [ERROR] Failed to invoke require, location: C:/test4/build/jsb-default/frameworks/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_global.cpp:300
    E/jswrapper: ERROR: Uncaught SyntaxError: Invalid or unexpected token, location: src/project.js:0:0
        STACK:
        [0]o@jsb-adapter/jsb-engine.js:1
        [1]anonymous@jsb-adapter/jsb-engine.js:1
        [2]downloadScript@jsb-adapter/jsb-engine.js:2804
        [3]139.m.handle@src/cocos2d-jsb.js:22356
        [4]o@src/cocos2d-jsb.js:23066
        [5]o@src/cocos2d-jsb.js:23084
        [6]o@src/cocos2d-jsb.js:23084
        [7]146.c.flowIn@src/cocos2d-jsb.js:23132
        [8]143.m.append@src/cocos2d-jsb.js:22820
        [9]133.v.load@src/cocos2d-jsb.js:21713
        [10]prepare@src/cocos2d-jsb.js:6529
        [11]run@src/cocos2d-jsb.js:6542
        [12]window.boot@main.js:175
        [13]anonymous@main.js:198
        ScriptEngine::evalString script main.js, failed!
        ERROR: Uncaught TypeError: Cannot set property 'width' of null, location: src/cocos2d-jsb.js:0:0
        STACK:
        [0]setCanvasSize@src/cocos2d-jsb.js:28004
        [1]jsb.onResize@jsb-adapter/jsb-engine.js:2770
        [ERROR] (C:/test4/build/jsb-default/frameworks/cocos2d-x/cocos/scripting/js-bindings/jswrapper/v8/Object.cpp, 562): Invoking function (0xc52377e0) failed!

有没有踩过坑的朋友分享一下解法?

说句实话,客户端的代码还不如客户端的资源有诱惑力,谁到看不上谁的代码,但是都眼馋对方的资源,所以可不可以考虑在原生平台上不混淆js代码?

有道理,但目前项目要求是要我们继续尝试混淆代码,只是我们被这问题卡了几天了,很难受 :joy:

解决了么。。 我们也遇到一样的问题。。。

你们有用protobuf吗?

用了,是这个的问题吗

原生平台不能重度混淆!!!很多接口调用c++的!!

直接用jsob其实就好, 不需要什么插件
这是我目前用的, 原生平台发过几个游戏, n个版本, 没什么问题

 javascript-obfuscator \
        $RELEASE_BUILD/jsb-default/assets/main/index.js \
        --output $RELEASE_BUILD/jsb-default/assets/main/index.js  \
        --config jsob.json
{
    "optionsPreset": "low-obfuscation"
}
1赞

我后来看这篇文找到解决报错的方法了

记录一下,是接入的protobuf库的问题导致,库里有个longbits.js文件,var zeroHash = LongBits.zeroHash = “/0/0/0/0/0/0/0/0”,我改成了var zeroHash = LongBits.zeroHash = “”,感觉是个判断为空的方法,先这样改了。

改掉这个部份后,就能成功打包apk了,但还是有些混淆选项会导致失败,所以我每个选项都测试过,发现只有"注入废代码"这一项是只要打开,就会导致报错的,也许你的项目的状况跟我不一样,可以再多试试。

1赞

谢了,下个项目还有混淆的需求的话再试试 :grin: