- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我最近为我的 Eclipse Android 项目激活了 ProGuard。将外部库和动态引用的类添加到 proguard.cfg 后,构建 apk 时我没有收到任何错误。但是,当我尝试启动已安装的应用程序时,出现了 NoSuchMethodError。
我将其缩小到在主 Activity 的 onCreate 方法中调用的特定方法。为了简化事情,下面是类和方法的样子(我省略了很多代码,但我认为这应该可以说明):
public class TestMain extends TabActivity implements OnSharedPreferenceChangeListener{
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
testMethod();
}
}
testMethod() 定义如下:
private void testMethod() {
int charsLeft = maxPostMessageLength - someEditText.length();
...
}
当我删除“someEditText.length()”部分时,应用程序启动。所以,在我看来,找不到的方法是 EditText.length() 方法。但奇怪的是,当我从 testMethod 中删除“someEditText.length()”并将其直接放入 onCreate 方法时,应用程序也会启动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
test = someEditText.length();
testMethod();
}
有谁知道我如何摆脱这个错误以及为什么我可以直接在 onCreate 方法中调用 someEditText.length() 而不是在 onCreate 方法调用的方法中?在不使用 Proguard 的情况下,应用程序当然可以正常工作。
编辑:我尝试了 proguard.cfg 中的 -dontshrink、-dontobfuscate 和 -dontoptimzie 选项。使用 -dontoptimize 应用程序启动时没有错误。尽管如此,到底是什么导致了这个特定的错误还是很有趣的。
最佳答案
Proguard 文档自豪地声明:“ProGuard 工具通过删除未使用的代码和重命名类来缩小、优化和混淆您的代码”。
好吧,在遇到您描述的运行时错误后,我放弃了它的“收缩”部分。我添加了行
-dontshrink
到proguard.cfg
您可以通过检查文件 usage.txt 来查看哪些例程已从您的代码中删除。我很高兴地说,在我的项目中它总是丢失,这意味着代码被混淆但没有被删除。我现在没有收到任何运行时错误。
关于安卓:Proguard NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711942/
我正在用来自JSON文件的一些数据填充Flutter中的列表。 但是,我的代码不断抛出异常"NoSuchMethodError (NoSuchMethodError: The method 'add'
通过eclipse运行Tomcat 7报错是: javax.servlet.ServletException: java.lang.NoSuchMethodError: org.eclipse.jdt
这是我的错误行: 这是我的代码: 最佳答案 final jobs= json.decode(response.body)['name_database_table']; 关于mobile - NoSu
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便可以重新打开它,visit the help center
我已经被这个错误困扰了几个小时。。我的pom.xml。应用程序未启动。所有的Spring框架依赖于相同的版本,但仍然得到相同的错误。。更新。MVN依赖的结果:树。看起来这里一切都很好。
我得到: NoSuchMethodError: com.foo.SomeService.doSmth()Z 我是否正确理解这个'Z'意味着doSmth()方法的返回类型是 boolean 值?如果为
我在 Speed 类中引用 PlayerUtil.getMovementSpeed(player);,在我的 PlayerUtil 类中,我将方法定义为: public static double g
我得到: NoSuchMethodError: com.foo.SomeService.doSmth()Z 我是否正确理解这个 'Z' 意味着 doSmth() 方法的返回类型是 boolean 值?
我在使用 Spark 和 Scala 时遇到了一个奇怪的错误。我有一段代码声明了一个变量: var offset = 0 这会导致以下异常: java.lang.NoSuchMethodError:
我已经成功实现了 reflectionEquals 方法,其中包含一个排除字段列表。 return EqualsBuilder.reflectionEquals(this, obj, new Str
我正在使用 Spring 框架和 Maven 开发 Java Enterprise 应用程序。我正在为此学习一门类(class),并且一直坚持集成 Hibernate JPA。当我运行项目时,它返回以
I/flutter ( 8282): The following NoSuchMethodError was thrown building Meme(dirty, state: _MemeState
运行以下代码时出现 NoSuchMethodError - 我想从 JSON url 打印出轨道标题 - 我错过了什么吗? import 'dart:async'; import 'dart:conv
我正在做 Searchview flutter 中的例子 https://github.com/MageshPandian20/Flutter-SearchView 但我想对 进行更改子项类有一个 最
尝试从Eclipse中的简单Java程序连接到Hive时出现以下错误。看起来好像连接,然后引发此错误。我可以通过beeline在本地连接到Hive Thrift服务器,而不会出现问题。 两个libth
当我向安全资源发出请求时,会发生NoSuchMethodError。 基于基于Spring Boot 1.4.4的Grails 3.2.5的项目 AppConfig: @EnableWebSecuri
这个问题已经有答案了: Differences between Exception and Error (11 个回答) 已关闭 7 年前。 我的印象是 Exception 非常适合捕获所有可能的异常
祝大家有美好的一天!我使用 google Vision API,当我在 IntelliJ Idea 中运行我的程序时,它工作得很好,但是当我编译 jar 文件时,它在处理照片时给出错误 java.la
我一直在为这个问题苦苦挣扎。我正在开发一个包含很多包的 netbeans java 项目,起初我更改了 gui,但是当我运行代码时,它没有反射(reflect)任何更改,即使我在保存、清理、清理和编译
我一直在寻找问题的解决方案,但没有得到足够的答案。 我正在开发 Bukkit插件的更新系统。因此,我必须自己编写这些类的代码。但我一直想从 debug(String) 调用一个方法(具体来说: ano
我是一名优秀的程序员,十分优秀!