【问题标题】:How to find out what's causing it in an obfuscated java file?如何在混淆的 java 文件中找出导致它的原因?
【发布时间】:2015-05-02 10:47:48
【问题描述】:
java.lang.RuntimeException: Missing type parameter.
    at com.google.gson.reflect.TypeToken.getSuperclassTypeParameter(TypeToken.java:84)
    at com.google.gson.reflect.TypeToken.<init>(TypeToken.java:62)
    at a.a.b.a.c.<init>(Unknown Source)
    at a.a.b.a.b.a(Unknown Source)
    at a.a.b.a.b.deserialize(Unknown Source)
    at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)`
    at com.google.gson.Gson.fromJson(Gson.java:795)
    at com.google.gson.Gson.fromJson(Gson.java:761)
    at com.google.gson.Gson.fromJson(Gson.java:710)
    at com.google.gson.Gson.fromJson(Gson.java:682)
    at a.a.b.d.d.b(Unknown Source)
    at a.a.b.i.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

这是我运行的 Java 文件的 StackTrace(混淆),当我的程序没有被混淆并运行时,我没有得到这个。因此,我得出结论,这是由混淆器(ProGuard)引起的。

有什么方法可以解决这个问题,或者获取一些信息来说明可能导致此问题的原因吗?

【问题讨论】:

  • 编辑您的问题并与我们分享您的代码
  • 混淆后如何提供代码?是否需要非混淆代码?如果是这样,我可以问哪些部分?
  • 但是一定有一些代码调用了这个混淆代码吧?
  • @Ben 你有权限访问混淆代码的映射文件吗?如果是这样,请看这里:proguard.sourceforge.net/manual/retrace/examples.html
  • 有一种调试混淆代码的方法,正如谷歌在此处developer.android.com/tools/help/proguard.html 中描述的那样。遵循指南后,您可以使用 mapping.txt 文件的内容更新您的问题。

标签: java proguard obfuscation


【解决方案1】:

好像java.lang.RuntimeException: Missing type parameter. 你传递了一些没有他类型的参数。

通过网络检查您的函数调用是否与 google 的 API 进行对比。

【讨论】:

  • 我明白了。我已经使用映射技术来获取指向此代码的正确堆栈跟踪:pastebin.com/Mz8evpwf
  • 不是我,它是别人为一款名为 Minecraft 的游戏开发的启动器,我只是添加了一些可以增强游戏体验的扩展。同时提供适当的学分
  • 我很好奇为什么没有显示错误的行号。和JDK一起运行有关系吗?
  • @Ben ProGuard 默认删除调试信息。您必须使用-keepattribute SourceFile,LineNumberTable 选项来保留它们。见proguard.sourceforge.net/manual/refcard.html
  • 我进行了更深入的研究,发现每当调用 Google 的 fromJson 方法时,我总是会得到堆栈跟踪:例如CompleteVersion version1 = (CompleteVersion)this.gson.fromJson(this.getContent(ex), CompleteVersion.class);在混淆后和执行时被 RuntimeException 捕获。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 2014-01-17
  • 2023-04-03
  • 1970-01-01
  • 2016-12-11
  • 2013-05-27
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多