Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

当转换的js代码文件比较大的时候,报错generated bytecode for method exceeds 64K limit. #4

Closed
vipterry opened this issue Jun 5, 2024 · 6 comments

Comments

@vipterry
Copy link

vipterry commented Jun 5, 2024

输入文件:dist/apps/script.js
输出文件夹:dist/apps/
最终的输出地址:dist/apps/20240605_133246
Rhino 优化等级:0
禁用字符串加密:false

Exception in thread "main" org.mozilla.classfile.ClassFileWriter$ClassFileFormatException: generated bytecode for method exceeds 64K limit.
at org.mozilla.classfile.ClassFileWriter.stopMethod(ClassFileWriter.java:310)
at org.mozilla.javascript.optimizer.Codegen.generateFunctionConstructor(Codegen.java:681)
at org.mozilla.javascript.optimizer.Codegen.generateCode(Codegen.java:264)
at org.mozilla.javascript.optimizer.Codegen.compileToClassFile(Codegen.java:176)
at org.mozilla.javascript.optimizer.ClassCompiler.compileToClassFiles(ClassCompiler.java:161)
at org.mozilla.mycode.Main.toDexFile(Main.java:96)
at org.mozilla.mycode.Main.main(Main.java:73)

image
@xxxxue
Copy link
Owner

xxxxue commented Jun 5, 2024

搜索引擎看了下. 这里有个方案.. 你可以试一试,
命令中 优化等级改为 -1
-l -1

https://blog.csdn.net/freishlove/article/details/83803439

@vipterry
Copy link
Author

vipterry commented Jun 5, 2024

搜索引擎看了下. 这里有个方案.. 你可以试一试, 命令中 优化等级改为 -l -1

https://blog.csdn.net/freishlove/article/details/83803439

这个文章我也看到了,但也是不行,这个js文件混淆过比较大,即使不混淆也要1百多k,还是不行。

image

@xxxxue
Copy link
Owner

xxxxue commented Jun 5, 2024

我这边的 js 文件是 260K
出来的 dex 500K
执行一切正常,

pull
issues

这个 64K 好像是 java 虚拟机中 的规则

你可以用排除法, 测试下哪个 js 方法 引起的这个问题
找到后, 把他拆成多个小方法,

或者是 研究下把部分代码 dex . 不关键的代码还是保持 js

如果还是没有能执行成功. 那实在没法了.
只能等 autox 的大佬, 把 Rhino 换成 nodejs,
到时候用 nodejs 的加密方式

@xxxxue xxxxue pinned this issue Jun 5, 2024
@vipterry
Copy link
Author

vipterry commented Jun 5, 2024

时候用 nodejs 的加

我这边的 js 文件是 260K 出来的 dex 500K 执行一切正常,

pull issues

这个 64K 好像是 java 虚拟机中 的规则

你可以用排除法, 测试下哪个 js 方法 引起的这个问题 找到后, 把他拆成多个小方法,

或者是 研究下把部分代码 dex . 不关键的代码还是保持 js

如果还是没有能执行成功. 那实在没法了. 只能等 autox 的大佬, 把 Rhino 换成 nodejs, 到时候用 nodejs 的加密方式

从你给的链接上找过去,找到一个讨论,超大的js文件的确会有问题,应该会在未来的“rhino_1_8”的分支版本解决,如果方便的话能不能编译一个测试一下,或者等1.8版本的正式版出来再说。

image

@vipterry
Copy link
Author

vipterry commented Jun 6, 2024

我尝试把“ rhino_1_8”分支的代码直接拿到我们这个项目上直接编译,好像已经不兼容,很多代码警告和错误(我完全不会写Java的),方便的话帮忙看一看。

image image

@xxxxue
Copy link
Owner

xxxxue commented Jun 6, 2024

我尝试把“ rhino_1_8”分支的代码直接拿到我们这个项目上直接编译,好像已经不兼容,很多代码警告和错误(我完全不会写Java的),方便的话帮忙看一看。

这个分支太久了. 涉及多个文件新旧代码的合并 和 测试. 估计作者来了都搞不了.
咱们搞不定这个

K}~SEHDJY)}9%{@ $8275LF

@xxxxue xxxxue closed this as completed Jun 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants