gpt4 book ai didi

安卓:Proguard NoSuchMethodError

转载 作者:太空狗 更新时间:2023-10-29 13:41:53 28 4
gpt4 key购买 nike

我最近为我的 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com