java.lang.NoClassDefFoundError Proguard - 无法解析虚方法

时间:2013-05-13 05:16:20

标签: android obfuscation proguard

在我的应用程序的主要类中,我正在以编程方式处理API变体:

    private static BluetoothHeadset mBluetoothHeadset;

// later in code

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

    mBluetoothHeadset = proxy;

    }

我认为NoClassDefFoundError是由于我声明了变量BluetoothHeadset这是API 11引起的,但是我的应用程序可以从API 9获得。我认为我很聪明并且没有直接引用缺少的类,因此我参数化它:

    private static Object mBluetoothHeadset;

// later in code

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

    mBluetoothHeadset = (BluetoothHeadset) proxy;

    }

但这不起作用,我想知道Proguard混淆是否是罪魁祸首:

Could not find class 'com.package.name.qc', referenced from method com.package.name.Example.<init>

VFY: unable to resolve virtual method 435: Landroid/bluetooth/BluetoothHeadset;.startVoiceRecognition (Landroid/bluetooth/BluetoothDevice;)Z

在遮瑕期间,Proguard是否映射了在API级别9上找不到的BluetoothHeadset类?

我以这种方式处理许多其他API变体,之前从未遇到过这个问题,所以我很困惑为什么它会在这些情况下发生?也许这是由于我正在使用的变量声明?

我真的,真的不想为每个API级别创建单独的类,因为它会在我的代码中导致如此多的重复,并且在我看来,要管理起来要困难得多。

我提前感谢你,希望你能提供帮助。

编辑 - 我在Eyes Free源代码中发现他们使用Reflection实现了他们自己的BluetoothHeadsetCompat类,我假设他们是如何解决问题的。虽然它看起来并不简单,所以当我浏览代码时,欢迎任何其他建议!

0 个答案:

没有答案