如何消除Android验证错误

如何消除Android验证错误,android,Android,我使用这个方法来获取广播地址数组 使用的一些方法和类在旧API中不存在 所以我在方法的开头添加了一个版本检查,我试图在Android 1.6模拟器上运行它,但失败了,出现了验证错误 private InetAddress[] getBroadCast() throws SocketException { int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion < 9)

我使用这个方法来获取广播地址数组

使用的一些方法和类在旧API中不存在 所以我在方法的开头添加了一个版本检查,我试图在Android 1.6模拟器上运行它,但失败了,出现了验证错误

private InetAddress[] getBroadCast() throws SocketException
{

    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (currentapiVersion < 9)
    {       
        try {
            String ipString = getWifiIp();
            int loc = ipString.lastIndexOf(".");
            InetAddress baddrs[] = new InetAddress[1];
            baddrs[0] = new InetAddress.getByName(ipString.substring(0, loc)+".255");
            return baddrs;
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return null;
        }
    }
            else{
    String bcast="";
    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
        NetworkInterface intf = en.nextElement();

        for (InterfaceAddress address : intf.getInterfaceAddresses()) {
            if(address.getBroadcast()!=null) bcast=bcast+address.getBroadcast().toString().substring(1)+"::";
        }}
    String[] bcastarray= bcast.split("::");
    InetAddress baddrs[] = new InetAddress[bcastarray.length];
    for(int i=0;i<bcastarray.length;i++)
        try {
            baddrs[i] = new  InetAddress.getByName(bcastarray[i]);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    return baddrs;
}
 }

android.os.Build.VERSION.SDK_INT仅在API级别4及更高版本中可用。我正在寻找解决这些问题的方法

这在1.6上不起作用。1.6类加载器将尝试检查所有方法,即使您实际上没有调用它们,这就是为什么会出现错误。您必须创建一个调用
getInterfaceAddress()
的包装器类,这样它就不会被加载

您是否缺少
else
子句?对于您当前的代码,
getInterfaceAddresses()
无论版本如何,代码都会执行。添加了else子句,但这并不阻止验证器拒绝1.6设备上的代码。啊,我现在明白了。这在1.6上不起作用。1.6类加载器将尝试检查所有方法,即使您实际上没有调用它们,这就是为什么会出现错误。您必须创建一个调用
getInterfaceAddress()
的包装类,这样它就不会被加载。我试图使用反射来调用这些方法,但包装类似乎更简单更好:-)请回答这个问题,这样我就可以接受答案:-)谢谢。我使用Play Store的多apk功能来解决这个问题。现在,我将单个apk与包装器类一起使用:-)在
10-12 11:38:22.030: W/dalvikvm(297): VFY: unable to resolve virtual method 4463: Ljava/net/NetworkInterface;.getInterfaceAddresses ()Ljava/util/List;
10-12 11:38:22.030: W/dalvikvm(297): VFY:  rejecting opcode 0x6e at 0x0071
10-12 11:38:22.040: W/dalvikvm(297): VFY:  rejected Lhello/BroadcastSend;.getBroadCast ()[Lhello/IPMAddress;
10-12 11:38:22.040: W/dalvikvm(297): Verifier rejected class Lhello/BroadcastSend;
10-12 11:38:22.040: W/dalvikvm(297): threadid=19: thread exiting with uncaught exception (group=0x4001aa28)