Android support V3 v7 v13的区别

本文详细介绍了Android支持库的不同版本,包括v4、v7和v13支持库的主要特性和用途。v4支持库适用于Android 1.6及以上版本,提供广泛的API支持;v7支持库则针对2.1及以上版本,引入了ActionBar等特性;v13支持库为3.2及以上版本提供Fragment等界面模式的支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单翻译:

  V4用于1.6到更高的API使用。


V7是2.1到更高的API使用,其中包含ACtionBar。


V13是3.2到更高的API的使用。



原文:

v4 Support Library

This library is designed to be used with Android 1.6 (API level 4) and higher. It includes the largest set of APIs compared to the other libraries, including support for application components, user interface features, accessibility, data handling, network connectivity, and programming utilities.

v7 Libraries

There are several libraries designed to be used with Android 2.1 (API level 7) and higher. These libraries provide specific feature sets and can be included in your application independently from each other.

v7 appcompat library

This library adds support for the Action Bar user interface design pattern.

Note:
This library depends on the v4 Support Library. If you are using Ant or Eclipse, make sure you include the v4 Support Library as part of this library's classpath.

So yes you need both jars if you want to use v7.

Read more about Support Library Features


Update for android-support-v13.jar

v13 Support Library

This library is designed to be used for Android 3.2 (API level 13) and higher. It adds support for the Fragment user interface pattern with the (FragmentCompat) class and additional fragment support classes

When you see the package details it has a class FragmentCompat as given in definition. So it has not the all classes of appcompat library.




package com.xc.candyfloss.modbus; import android.util.Log; import android_serialport_api.SerialPort; import com.xc.candyfloss.modbus.exception.ModbusError; import com.xc.candyfloss.modbus.exception.ModbusErrorType; import com.xc.candyfloss.modbus.utilities.ByteArrayReader; import com.xc.candyfloss.modbus.utilities.ByteArrayWriter; import com.xc.candyfloss.modbus.utilities.CRC16; import com.xc.candyfloss.modbus.utilities.ThreadUtil; import com.xc.candyfloss.modbus.utilities.TimeoutUtil; import java.io.IOException; import java.util.BitSet; public class ModbusMaster { private SerialPort port; private int timeout; public ModbusMaster(SerialPort arg2) { super(); this.timeout = 2000; this.port = arg2; } static SerialPort access$000(ModbusMaster arg0) { return arg0.port; } public int[] execute(int arg17, int arg18, int arg19, int arg20, int arg21) throws IOException, ModbusError { StringBuilder v3_2; ModbusErrorType v2_2; int[] v7_1; ByteArrayReader v6_2; byte[] v8_2; int v13; StringBuilder v4; ModbusErrorType v3_1; int v12; int v11; int v8; int v7; ByteArrayWriter v6_1; ModbusMaster v1 = this; int v0 = arg17; int v2 = arg18; int v3 = arg20; __monitor_enter(this); int v5 = arg19 - 1; if(v0 >= 0) { int v6 = 0xFF; if(v0 <= v6) { if(v5 >= 0 && v5 <= 0xFFFF) { if(v3 >= 1 && v3 <= v6) { try { v6_1 = new ByteArrayWriter(); v6_1.writeInt8(v0); v7 = 6; v8 = 3; int v9 = 4; int v10 = 2; v11 = 5; v12 = 0; if(v2 == 1 || v2 == v10) { v6_1.writeInt8(v2); v6_1.writeInt16(v5); v6_1.writeInt16(v3); v13 = (((int)Math.ceil((((double)v3)) * 0.1 / 8))) + 5; label_71: v7 = 1; } else { if(v2 != v9) { if(v2 == v8) { } else { if(v2 != v11) { if(v2 == v7) { } else { v3_1 = ModbusErrorType.ModbusFunctionNotSupportedError; v4 = new StringBuilder(); v4.append("Not support function "); v4.append(v2); throw new ModbusError(v3_1, v4.toString()); } } v13 = v2 != v11 || arg21 == 0 ? arg21 : 0xFF00; v6_1.writeInt8(v2); v6_1.writeInt16(v5); v6_1.writeInt16(v13); v13 = 8; v7 = 0; goto label_72; } } v6_1.writeInt8(v2); v6_1.writeInt16(v5); v6_1.writeInt16(v3); v13 = v3 * 2 + v11; goto label_71; } label_72: v6_1.writeInt16Reversal(CRC16.compute(v6_1.toByteArray())); v1.port.getOutputStream().write(v6_1.toByteArray()); v6_1 = new ByteArrayWriter(); v8 = 150; } catch(Throwable v0_1) { goto label_244; } try { ThreadUtil.sleep(v8); boolean[] v8_1 = new boolean[1]; boolean v14 = TimeoutUtil.execute(new Runnable(v8_1, v6_1, v13) { public void run() { int v0 = 0x40; try { byte[] v0_2 = new byte[v0]; while(!this.val$complete[0]) { if(ModbusMaster.this.port.getInputStream().available() > 0) { int v1 = ModbusMaster.this.port.getInputStream().read(v0_2, 0, v0_2.length); if(v1 > 0) { this.val$response.write(v0_2, 0, v1); if(this.val$response.size() >= this.val$finalExpected_length) { return; } } } ThreadUtil.sleep(1); } } catch(Exception v0_1) { v0_1.printStackTrace(); } } }, v1.timeout); v8_1[0] = true; v6_1.flush(); if(!v14) { goto label_195; } v8_2 = v6_1.toByteArray(); } catch(Throwable v0_1) { goto label_206; } try { v6_1.close(); if(v8_2 != null && v8_2.length == v13) { v6_2 = new ByteArrayReader(v8_2); v13 = v6_2.readInt8(); if(v13 != v0) { goto label_173; } else if(v6_2.readInt8() <= 0x80) { if(v7 != 0) { v0 = v6_2.readInt8(); v7 = v8_2.length - v11; if(v0 == v7) { } else { v3_1 = ModbusErrorType.ModbusInvalidResponseError; throw new ModbusError(v3_1, String.format("Byte count is %d while actual number of bytes is %d. ", Integer.valueOf(v0), Integer.valueOf(v7))); } } else { v0 = 0; } v7_1 = new int[v3]; if(v2 == 1 || v2 == v10) { byte[] v2_1 = new byte[v0]; for(v5 = 0; v5 < v0; ++v5) { v2_1[v5] = ((byte)v6_2.readInt8()); } BitSet v0_2 = BitSet.valueOf(v2_1); for(v2 = 0; true; ++v2) { if(v2 >= v3) { goto label_167; } v5 = v0_2.get(v2) ? 1 : 0; v7_1[v2] = v5; } } else { if(v2 != v9) { if(v2 == 3) { } else { if(v2 != v11 && v2 != 6) { goto label_167; } v7_1[0] = v6_2.readInt16(); goto label_167; } } while(true) { if(v12 >= v3) { goto label_167; } v0 = v6_2.readInt16(); v7_1[v12] = v0 <= 0x7FFF || v5 == 643 ? v0 : v0 - 0x10000; ++v12; } } goto label_167; } else { goto label_169; } } goto label_184; } catch(Throwable v0_1) { goto label_244; } label_167: __monitor_exit(this); return v7_1; try { label_169: throw new ModbusError(v6_2.readInt8()); label_173: v3_1 = ModbusErrorType.ModbusInvalidResponseError; throw new ModbusError(v3_1, String.format("Response slave %d is different from request slave %d", Integer.valueOf(v13), Integer.valueOf(arg17))); label_184: v2_2 = ModbusErrorType.ModbusInvalidResponseError; v3_2 = new StringBuilder(); v3_2.append("Response length is invalid "); v3_2.append(v8_2.length); throw new ModbusError(v2_2, v3_2.toString()); } catch(Throwable v0_1) { goto label_244; } try { label_195: throw new ModbusError(ModbusErrorType.ModbusTimeoutError, String.format("Timeout of %d ms.", Integer.valueOf(v1.timeout))); } catch(Throwable v0_1) { label_206: Throwable v2_3 = v0_1; try { v6_1.close(); goto label_212; } catch(Throwable v0_1) { Throwable v3_3 = v0_1; try { v2_3.addSuppressed(v3_3); label_212: throw v2_3; label_213: v2_2 = ModbusErrorType.ModbusInvalidArgumentError; v4 = new StringBuilder(); v4.append("Invalid quantity_of_x "); v4.append(v3); throw new ModbusError(v2_2, v4.toString()); label_223: v2_2 = ModbusErrorType.ModbusInvalidArgumentError; v3_2 = new StringBuilder(); v3_2.append("Invalid starting_address "); v3_2.append(v5); throw new ModbusError(v2_2, v3_2.toString()); label_233: v3_1 = ModbusErrorType.ModbusInvalidArgumentError; v4 = new StringBuilder(); v4.append("Invalid slave "); v4.append(v0); throw new ModbusError(v3_1, v4.toString()); } catch(Throwable v0_1) { label_244: __monitor_exit(this); throw v0_1; } } } } goto label_213; } goto label_223; } } goto label_233; } public boolean readCoil(int arg2, int arg3) throws IOException, ModbusError { int[] v2 = this.readCoils(arg2, arg3, 1); boolean v3 = false; if(v2[0] > 0) { v3 = true; } return v3; } public int[] readCoils(int arg7, int arg8, int arg9) throws IOException, ModbusError { return this.execute(arg7, 1, arg8, arg9, 0); } public int readHoldingRegister(int arg2, int arg3) throws IOException, ModbusError { return this.readHoldingRegisters(arg2, arg3, 1)[0]; } public int[] readHoldingRegisters(int arg7, int arg8, int arg9) throws IOException, ModbusError { return this.execute(arg7, 3, arg8, arg9, 0); } public boolean readInput(int arg2, int arg3) throws IOException, ModbusError { int[] v2 = this.readInputs(arg2, arg3, 1); boolean v3 = false; if(v2[0] > 0) { v3 = true; } return v3; } public int readInputRegister(int arg2, int arg3) throws IOException, ModbusError { return this.readInputRegisters(arg2, arg3, 1)[0]; } public int[] readInputRegisters(int arg7, int arg8, int arg9) throws IOException, ModbusError { return this.execute(arg7, 4, arg8, arg9, 0); } public int[] readInputs(int arg7, int arg8, int arg9) throws IOException, ModbusError { return this.execute(arg7, 2, arg8, arg9, 0); } public void setTimeout(int arg1) { this.timeout = arg1; } public void writeSingleCoil(int arg7, int arg8, boolean arg9) throws IOException, ModbusError { this.execute(arg7, 5, arg8, 1, arg9); } public void writeSingleRegister(int arg9, int arg10, int arg11) throws IOException, ModbusError { Log.e("writeSingleRegister", "address:" + arg10 + "--value:" + arg11); this.execute(arg9, 6, arg10, 1, arg11); } } 请修正代码,并使用以下枚举public enum ModbusErrorType { ModbusError, ModbusFunctionNotSupportedError, ModbusDuplicatedKeyError, ModbusMissingKeyError, ModbusInvalidBlockError, ModbusInvalidArgumentError, ModbusOverlapBlockError, ModbusOutOfBlockError, ModbusInvalidResponseError, ModbusInvalidRequestError, ModbusTimeoutError }
07-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值