看英语做游戏的网站,怎么做图片网站,wordpress 协议,山东省工程建设信息官方网站Android13 有线变更
以太网相关的功能在Android12 和13 网络部分变化是不大的#xff0c;Android11 到Android 12 网络部分无论是代码存放目录和代码逻辑都是有较多修改的#xff0c;主要包括以下几个部分 限制了设置有线网参数设置接口方法 新增有线网开启关闭接口方法 新…Android13 有线变更
以太网相关的功能在Android12 和13 网络部分变化是不大的Android11 到Android 12 网络部分无论是代码存放目录和代码逻辑都是有较多修改的主要包括以下几个部分 限制了设置有线网参数设置接口方法 新增有线网开启关闭接口方法 新增了 updateConfiguration 接口方法 有线网设置的静态ip和代理信息重启后无效 EthernetManager相关代码从framework移到packages/modules/Connectivity/ (之前目录frameworks\base\core\java\android\net\EthernetManager.java) 后面开发Android12 或新版本代码你会发现wifi 、蓝牙、热点 之前 framework 的源码都移动到了下面的package目录
基于以上变更。如果app api targetSdkVersion设置成Android12 应用用无法用以前的接口设置有线网信息。 限制了设置有线网参数设置接口方法
//packages\modules\Connectivity\framework-t\src\android\net\EthernetManager.java/*** Get Ethernet configuration.* return the Ethernet Configuration, contained in {link IpConfiguration}.* hide*/SystemApi(client MODULE_LIBRARIES)public NonNull IpConfiguration getConfiguration(NonNull String iface) {try {return mService.getConfiguration(iface);} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}/*** Set Ethernet configuration.* hide*/SystemApi(client MODULE_LIBRARIES)public void setConfiguration(NonNull String iface, NonNull IpConfiguration config) {try {mService.setConfiguration(iface, config);} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}UnsupportedAppUsage(maxTargetSdk Build.VERSION_CODES.R, trackingBug 170729553)public String[] getAvailableInterfaces() {try {return mService.getAvailableInterfaces();} catch (RemoteException e) {throw e.rethrowAsRuntimeException();}}
从上面看主要是api加了限制 maxTargetSdk Build.VERSION_CODES.R //Android11
所以Android 12 或者更新的版本在EthernetManager 是调用不到上面几个接口方法的 新增有线网开启关闭接口方法
//packages\modules\Connectivity\framework-t\src\android\net\EthernetManager.javaRequiresPermission(anyOf {NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,android.Manifest.permission.NETWORK_STACK,android.Manifest.permission.NETWORK_SETTINGS})SystemApi(client MODULE_LIBRARIES)public void setEthernetEnabled(boolean enabled) {try {mService.setEthernetEnabled(enabled);} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}
这个是新增的接口方法 setEthernetEnabled 之前是要自己实现有线网开关的。需要的权限上面已经说明的基本是要系统签名的应用才能调用。 新增了 updateConfiguration 接口方法
//packages\modules\Connectivity\framework-t\src\android\net\EthernetManager.javaSystemApiRequiresPermission(anyOf {NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,android.Manifest.permission.NETWORK_STACK,android.Manifest.permission.MANAGE_ETHERNET_NETWORKS})public void updateConfiguration(NonNull String iface,NonNull EthernetNetworkUpdateRequest request,Nullable CallbackExecutor Executor executor,Nullable OutcomeReceiverString, EthernetNetworkManagementException callback) {Objects.requireNonNull(iface, iface must be non-null);Objects.requireNonNull(request, request must be non-null);final NetworkInterfaceOutcomeReceiver proxy makeNetworkInterfaceOutcomeReceiver(executor, callback);try {mService.updateConfiguration(iface, request, proxy);} catch (RemoteException e) {throw e.rethrowFromSystemServer();}} String iface //节点名称eth0 / eth1 EthernetNetworkUpdateRequest request 对象是包含静态ip和代理信息对象和特征属性对象。 后面两个是回调监听未要求非空是可以传null 的。 另外在有线网服务新api 增加了限制 //packages\modules\Connectivity\service-t\src\com\android\server\ethernet\EthernetServiceImpl.javaOverridepublic void updateConfiguration(NonNull final String iface,NonNull final EthernetNetworkUpdateRequest request,Nullable final INetworkInterfaceOutcomeReceiver listener) {Objects.requireNonNull(iface);Objects.requireNonNull(request);throwIfEthernetNotStarted();// TODO: validate that iface is listed in overlay config_ethernet_interfaces// only automotive devices are allowed to set the NetworkCapabilities using this API//only automotive devices 表明只有 车载设备支持设置该方法// 非车载项目必须注释调方法enforceAdminPermission 否则会报错这里是校验是否是车载项目//enforceAdminPermission(iface, request.getNetworkCapabilities() ! null,// updateConfiguration() with non-null capabilities);Log.i(TAG, lwz add updateConfiguration with: iface iface , listener listener);maybeValidateTestCapabilities(iface, request.getNetworkCapabilities());mTracker.updateConfiguration(iface, request.getIpConfiguration(), request.getNetworkCapabilities(), listener);}
所以要在自己项目中调用新的api 必须设置属性让自己的设备识别为车载项目或者把车载判断的逻辑去除即可 有线网设置的静态ip和代理信息重启后无效
//查看有线网配置信息保存的类
packages\modules\Connectivity\service-t\src\com\android\server\ethernet\EthernetConfigStore.javaprivate static final String CONFIG_FILE ipconfig.txt;private static final String FILE_PATH /misc/ethernet/;private static final String LEGACY_IP_CONFIG_FILE_PATH Environment.getDataDirectory() FILE_PATH;//Android13 新增下面路径private static final String APEX_IP_CONFIG_FILE_PATH ApexEnvironment.getApexEnvironment(TETHERING_MODULE_NAME).getDeviceProtectedDataDir() FILE_PATH; // TETHERING_MODULE_NAME --》com.android.tethering/**
可以看到之前的路径是
/data/misc/ethernet/ipconfig.txt
最新的有线网配置文件保存目录
/data/misc/apexdata/com.android.tethering/misc/ethernet/ipconfig.txt
可能存在因为未成功保存本地配置文件所以每次开机重启后无法读取到静态ip和代理等信息。
所以出现 有线网设置的静态ip和代理信息重启后无效 问题。主要原因为开机读取的时候目录未成功创建故保存未成功。
可以参考如下
*///packages\modules\Connectivity/service-t/src/com/android/server/ethernet/EthernetConfigStore.javaVisibleForTestingvoid read(final String newFilePath, final String oldFilePath, final String filename) {try {synchronized (mSync) {// Attempt to read the IP configuration from apex file path first.if (doesConfigFileExist(newFilePath filename)) {loadConfigFileLocked(newFilePath filename);return;}//ik-phoebe add for create dir data/misc/apexdata/com.android.tethering/misc/ethernetfinal File directory new File(newFilePath);if (!directory.exists()) {boolean mkdirs directory.mkdirs();Log.d(TAG, zmm add for mkdirs: newFilePath ,result: mkdirs);}// If the config file doesnt exist in the apex file path, attempt to read it from// the legacy file path, if config file exists, write the legacy IP configuration to// apex config file path, this should just happen on the first boot. New or updated// config entries are only written to the apex config file later.if (!doesConfigFileExist(oldFilePath filename)) return;loadConfigFileLocked(oldFilePath filename);writeLegacyIpConfigToApexPath(newFilePath, oldFilePath, filename);}} catch (Exception e) {e.printStackTrace();Log.e(TAG, zmm add for read exception: e.getMessage());}}Android13 有线网适配思路 主要是从以下两个方面 1使用新api接口设置静态ip和代理信息 2移除源码中限制接口的版本号 目前我采用的是二但是如果项目需要过gms认证则只能使用一因为gms合入mainline,packages\modules\Connectivity生成的jar会被覆盖。 diff --git a/framework-t/api/module-lib-current.txt b/framework-t/api/module-lib-current.txt
index 5a8d47b..177f6c5 100644
--- a/framework-t/api/module-lib-current.txtb/framework-t/api/module-lib-current.txt-44,9 44,11 package android.net {public class EthernetManager {method RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void addEthernetStateListener(NonNull java.util.concurrent.Executor, NonNull java.util.function.IntConsumer);method RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void addInterfaceStateListener(NonNull java.util.concurrent.Executor, NonNull android.net.EthernetManager.InterfaceStateListener);method NonNull public android.net.IpConfiguration getConfiguration(NonNull String);method NonNull RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public java.util.Listjava.lang.String getInterfaceList();method RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void removeEthernetStateListener(NonNull java.util.function.IntConsumer);method public void removeInterfaceStateListener(NonNull android.net.EthernetManager.InterfaceStateListener);method public void setConfiguration(NonNull String, NonNull android.net.IpConfiguration);method RequiresPermission(anyOf{android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setEthernetEnabled(boolean);method public void setIncludeTestInterfaces(boolean);field public static final int ETHERNET_STATE_DISABLED 0; // 0x0
diff --git a/framework-t/src/android/net/EthernetManager.java b/framework-t/src/android/net/EthernetManager.java
index 886d194..9c675fb 100644
--- a/framework-t/src/android/net/EthernetManager.javab/framework-t/src/android/net/EthernetManager.java-191,8 191,8 public class EthernetManager {* return the Ethernet Configuration, contained in {link IpConfiguration}.* hide*/
- UnsupportedAppUsage(maxTargetSdk Build.VERSION_CODES.R, trackingBug 170729553)
- public IpConfiguration getConfiguration(String iface) {SystemApi(client MODULE_LIBRARIES)public NonNull IpConfiguration getConfiguration(NonNull String iface) {try {return mService.getConfiguration(iface);} catch (RemoteException e) {-204,7 204,7 public class EthernetManager {* Set Ethernet configuration.* hide*/
- UnsupportedAppUsage(maxTargetSdk Build.VERSION_CODES.R, trackingBug 170729553)SystemApi(client MODULE_LIBRARIES)public void setConfiguration(NonNull String iface, NonNull IpConfiguration config) {try {mService.setConfiguration(iface, config);
--
2.17.1当然最好的还是使用系统提供的更新ip方法 IpConfiguration.Builder build new IpConfiguration.Builder();EthernetNetworkUpdateRequest.Builder requestBuilder new EthernetNetworkUpdateRequest.Builder();build.setHttpProxy(proxyinfo);
//如果是静态ip需要创建对应的静态staticIpConfigurationbuild.setStaticIpConfiguration(staticIpConfiguration);requestBuilder.setIpConfiguration(build.build());mEthManager.updateConfiguration(eth0, requestBuilder.build(), null, null);以上为Android13 以太网相关的更新
单曲循环《大悲咒》