Android13 网络 Adb 默认开启
Android 13 网络 Adb 默认开启
文章目录
- Android 13 网络 Adb 默认开启
- 一、前言
- 二、默认adb 代码实现
- 1、修改的目录:
- 2、具体修改:
- (1)在XXX_device.mk 添加属性
- (2)设置固定端口号
- (3)去除判断网络后,设置 ADB_WIFI_ENABLED 为 0 的代码
- 三、日志查看
- 四、其他
- 1、adb 相关属性
- (1) prop属性:persist.adb.tls_server.enable
- (2)prop属性:service.adb.tls.port
- (3)Settings属性:Settings.Global.ADB_WIFI_ENABLED "adb_wifi_enabled"
- 2、AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp 的关系
- (1) adb_wifi 是底层init/cpp 启动的服务
- (2)AdbService启动时机
- (3)ramework\base\core\java\android\debug\IAdbManager.aidl
一、前言
通过代码分析发现Android13 上对 网络adb 进行了限制!
Android13原生代码要求:必现连接上某个wifi,才能进行adb ,并且切换wifi或者关闭wifi都是会停止adb。
如果要做成Android11 或者之前一样,设备连接WiFi/有线网络后电脑可以直接进行adb连接,就要对系统代码进行适配修改。
关键:
1、mk 设置系统属性:persist.adb.tls_server.enable=1
2、写死端口号 5555
3、注释若干判断Wifi情况停止adb的代码
之前以为设置端口号和persist.adb.tls_server.enable 属性就ok了,但是还是有些小bug,还是要完全研究一遍具体流程。
二、默认adb 代码实现
1、修改的目录:
packages\modules\adb\daemon\adb_wifi.cpp
framework\base\services\core\java\com\android\server\adb\AdbDebuggingManager.java//修改前面两个文件就可以实现adb了,后面的文件试辅助分析的。//虽然 SettingsProvider 也有加载 Settings属性 Settings.Global.ADB_WIFI_ENABLED ,
//但是 prop那个属性更优先,所以可以不用考虑这里默认情况
framework\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider.java//增加分析定位文件,系统服务启动后会判断 属性persist.adb.tls_server.enable 进行相关操作
//如果属性设置不生效,可以在这里添加打印日志查看过程
framework\base\services\core\java\com\android\server\adb\AdbService.java
2、具体修改:
(1)在XXX_device.mk 添加属性
persist.adb.tls_server.enable = 1
手动添加,也是会记忆的!
(2)设置固定端口号
+++ b/release/packages/modules/adb/daemon/adb_wifi.cpp
@@ -160,7 +160,8 @@ static void enable_wifi_debugging() {if (sTlsServer != nullptr) {delete sTlsServer;}
- sTlsServer = new TlsServer(0);
+ // default port 0 means random,change to 5555 ,by liwenzhi
+ sTlsServer = new TlsServer(5555);if (!sTlsServer->Start()) {LOG(ERROR) << "Failed to start TlsServer";delete sTlsServer;
(3)去除判断网络后,设置 ADB_WIFI_ENABLED 为 0 的代码
一个是初始化的时候判断,另外一个是监听网络变化的时候判断,都去掉就行。
+++ b/release/frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManager.java
public class AdbDebuggingManager {case MSG_ADBDWIFI_ENABLE: {if (mAdbWifiEnabled) {break;}//not to check network state ,change by liwenzhi //(1)去除下面一大段判断网络和监听网络的代码/** AdbConnectionInfo currentInfo = getCurrentWifiApInfo();if (currentInfo == null) {Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 0); //关闭 adb wifibreak;}if (!verifyWifiNetwork(currentInfo.getBSSID(),currentInfo.getSSID())) {// This means that the network is not in the list of trusted networks.// We'll give user a prompt on whether to allow wireless debugging on// the current wifi network.Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 0);break;}setAdbConnectionInfo(currentInfo); **///no listener network change for disable adb_wifi,by liwenzhi/** IntentFilter intentFilter =new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);mContext.registerReceiver(mBroadcastReceiver, intentFilter); **/SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");case MSG_ADBDWIFI_DISABLE:if (!mAdbWifiEnabled) {break;}mAdbWifiEnabled = false;setAdbConnectionInfo(null);//no need unregisterReceiver, because no listener network,chenge by liwenzhi,//(2)监听已经注释,不需要再注销监听//mContext.unregisterReceiver(mBroadcastReceiver);case MSG_ADBWIFI_ALLOW:if (mAdbWifiEnabled) {break;}String bssid = (String) msg.obj;boolean alwaysAllow = msg.arg1 == 1;if (alwaysAllow) {mAdbKeyStore.addTrustedNetwork(bssid);}// Let's check again to make sure we didn't switch networks while verifying// the wifi bssid.//no to check network ,change by liwenzhi //(3)不需要判断网络/** AdbConnectionInfo newInfo = getCurrentWifiApInfo();if (newInfo == null || !bssid.equals(newInfo.getBSSID())) {break;}setAdbConnectionInfo(newInfo); **/Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 1);//no listener network change for disable adb_wifi,by liwenzhi //(4)不需要要监听网络变化/** IntentFilter intentFilter =new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);mContext.registerReceiver(mBroadcastReceiver, intentFilter); **/SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");
三、日志查看
日志查看主要是:AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp
AdbService 的日志默认是关闭模式的,需要设置成true,并且如果要看里面数据具体值,相关属性的日志需要自己添加打印出来。
AdbDebuggingManager 是有相关异常过程日志的
adb_wifi 该文件的打印,TAG 是adbd, 不管有没有打开adb,整个系统是一直有这个 adbd 的相关打印的,每秒大概有十几行日志!
这里查看打印相关日志多个关键字的信息命令:
logcat | grep -E "lwz|AdbService|changed to|adb wifi|AdbDebuggingManager"
lwz 是我自己加的关键字。
通过日志查看,正常开启的情况大概日志过程是:
01-01 08:00:22.756 496 511 I adbd : Waiting for persist.adb.tls_server.enable=1
08-16 15:13:50.123 762 762 D SystemServerTiming: StartAdbService
08-16 15:13:51.528 762 762 D AdbService: systemReady //修改 DEBUG = true 才看到的日志
08-16 15:13:51.528 762 762 D AdbService: lwz systemReady= persist.adb.tls_server.enable = 1 //自己加的日志打印
08-16 15:13:51.528 762 762 D AdbService: lwz systemReady mIsAdbWifiEnabled= true //自己加的日志打印,确认查看服务启动是否打开 adb
08-16 15:13:58.993 762 799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=0
08-16 15:13:58.994 762 762 D AdbService: lwz onChange shouldEnable = true
08-16 15:13:58.995 762 799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=1
08-16 15:13:59.015 762 802 D ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle
08-16 15:13:59.016 762 802 V ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle took to complete: 1ms
08-16 15:13:59.016 762 799 D AdbService: boot completed
08-16 15:13:59.033 496 511 I adbd : persist.adb.tls_server.enable changed to 1 //正常开启adb的日志
08-16 15:13:59.056 496 511 I adbd : adb wifi started on port 5555
08-16 15:13:59.058 496 511 I adbd : Waiting for persist.adb.tls_server.enable=0
如果未屏蔽网络判断,添加打印日志查看过程:
08-18 16:51:20.104 762 762 D SystemServerTiming: OnBootPhase_550_com.android.server.adb.AdbService$Lifecycle
08-18 16:51:20.104 762 762 D AdbService: systemReady
08-18 16:51:20.105 762 762 D AdbService: lwz systemReady mIsAdbWifiEnabled= true //这里说明,prop 属性已经设置了
08-18 16:51:26.248 762 798 I AdbDebuggingManager: Not connected to any wireless network. Not enabling adbwifi. //这里提示没网络,会执行关闭adb
08-18 16:51:26.586 762 762 D AdbService: lwz onChange shouldEnable = false
08-18 16:51:27.411 762 762 D AdbService: lwz onChange shouldEnable = false
08-18 16:51:27.971 762 798 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=0
08-18 16:51:27.972 762 798 D AdbService: setAdbEnabled(false), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=1 //关闭adb
08-18 16:51:27.973 510 517 I adbd : persist.adb.tls_server.enable changed to 0 //到这里 persist.adb.tls_server.enable 属性又变成了 0
08-18 16:51:27.973 510 517 I adbd : adb wifi stopped
08-18 16:51:27.981 762 798 D AdbService: Broadcasting enable = false, type = 1
这个也是为啥配置了那个 persist.adb.tls_server.enable =1 属性后,系统启动发现获取属性还是0 ,并且wifi adb未打开。
四、其他
1、adb 相关属性
(1) prop属性:persist.adb.tls_server.enable
系统启动后,AdbService 会判断该属性决定后续是否执行开启adb。
(2)prop属性:service.adb.tls.port
该属性是 adb_wifi.cpp 使能adb的时候设置的. 后续让你知道它的端口号。
所以设置这个属性值是没有意义的。
在 adb_wifi.cpp,初始化 TlsServer 设置固定端口 5555,那么这个属性一直就是 5555.
(3)Settings属性:Settings.Global.ADB_WIFI_ENABLED “adb_wifi_enabled”
同时在 AdbService 是有监听 这个Global 属性的变化,关联上 AdbDebuggingManager ,设置 adb 使能。
查询和设置命令:
//查询属性;
setttings get global adb_wifi_enabled
//设置属性 0/1:
setttings put global adb_wifi_enabled 1
该属性是系统上层设置的一个值,原本主要用来记录adb wifi 的开关状态。
因为Android13 会判断当前wifi是否是信任的,切换wifi后设置这个属性是无效的。
但是如果修改了上面去除网络限制对策后,直接设置Global属性,是会正常开关adb的。
如果未去除网络限制对策,你会发现 adb_wifi_enabled 无法设置成1,
因为 AdbDebuggingManager 在开启的是会还会判断网络情况,如果没有网络会设置为 0 .
2、AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp 的关系
(1) adb_wifi 是底层init/cpp 启动的服务
具体哪里启动的暂不去研究
里面的日志是跑在比较前面的,比SystemServer 更早。
同时也是具体能够使能 网络adb 的关键;
也是为啥设置了 persist.adb.tls_server.enable=1 能够直接使能网络adb的原因。
正常开启和关闭adb 是有相关日志的。
(2)AdbService启动时机
AdbService 是SystemServer 执行 startOtherServices 里面启动的服务。
AdbService extends IAdbManager.Stub //具体暴露接口可以看 IAdbManager
AdbDebuggingManager 是一个管理adbDebug的类,在 AdbService 里面实例化,其实就是分化了一下具体执行的代码。
很多无法进入adb wifi 的情况都是在AdbDebuggingManager 拒绝的,并且重新设置了 Global属性 和 Prop 属性为0
(3)ramework\base\core\java\android\debug\IAdbManager.aidl
package android.debug;import android.debug.FingerprintAndPairDevice;
import android.debug.IAdbCallback;/*** Interface to communicate remotely with the {@code AdbService} in the system server.** @hide //隐藏的!*/
interface IAdbManager {/*** Allow ADB debugging from the attached host. If {@code alwaysAllow} is* {@code true}, add {@code publicKey} to list of host keys that the* user has approved.** @param alwaysAllow if true, add permanently to list of allowed keys* @param publicKey RSA key in mincrypt format and Base64-encoded*/void allowDebugging(boolean alwaysAllow, String publicKey);/*** Deny ADB debugging from the attached host.*/void denyDebugging();/*** Deny ADB wireless debugging on the connected network.*/void denyWirelessDebugging();/*** Returns true if device supports secure Adb over Wi-Fi.*/boolean isAdbWifiSupported();}
上面接口估计对开发者没啥用!
适配了去除网络限制上面代码后,就应用而言,使用 Settings.Global.ADB_WIFI_ENABLED 控制和或者当前 网络adb状态最合适的。
虽然使用prop 属性也能生效,但是系统应用Settings判断的是Settings.Global.ADB_WIFI_ENABLED的值是否为1,会出现状态显示不同步的情况。
相关文章:
Android13 网络 Adb 默认开启
Android 13 网络 Adb 默认开启 文章目录 Android 13 网络 Adb 默认开启一、前言二、默认adb 代码实现1、修改的目录:2、具体修改:(1)在XXX_device.mk 添加属性(2)设置固定端口号(3)去…...
Git分享-规范/建议/技巧
1. Git多人协作开发流程图 1.1 processOn默认的模板 1.2 改造之后 https://www.processon.com/view/link/64ccaf56a433c931b2f9428a 访问密码:512I ① 总流程图 ② feat分支(功能/需求 分支)流程 ③ bugfix分支(紧急补丁分支&…...
vue3文件下载功能
定义方法: utils.js /**** param url 目标下载接口* param query 查询参数* param fileName 文件名称* returns {*}*/ export function downBlobFile(url: any, query: any, fileName: string) {return request({//url: url,method: get,responseType: blob,param…...
Python调用文心一言的API
最近申请了文心一言的key,然后尝试调用了一下文心一言,这里使用一个简单的方式来调用文心一言: pip install paddle-pipelinesfrom pipelines.nodes import ErnieBotapi_key "your apply key" secret_key "your apply secr…...
【计算机网络八股】计算机网络(一)
目录 计算机网络的各层协议及作用?TCP和UDP的区别?UDP 和 TCP 对应的应用场景是什么?详细介绍一下 TCP 的三次握手机制?为什么需要三次握手,而不是两次?为什么要三次握手,而不是四次?…...
记录一次arcgis engine开发版本引入问题
之前基于arcigs 10.1vs2013开发的程序,现在拿出来要改,但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本,都报错 (具体版本对应可以看这:ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…...
2023年Java毕业设计怎样选题,有哪些注意事项,300道Java毕业设计题目
文章目录 一、确定个人兴趣和技能二、考虑实际应用价值三、注重创新和独特性四、合理规划时间和资源五、注重实践和测试Java 毕业设计题目参考第一部分第二部分 小结 随着计算机技术的不断发展,Java编程语言已经成为了众多大学计算机专业学生必修的一门课程。而Java…...
算法-滑动窗口-串联所有单词的子串
算法-滑动窗口-串联所有单词的子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 1.2 题目描述 2 滑动窗口Hash表 2.1 解题思路 构建一个大小为串联子串的总长的滑动窗口为每个words中的子串创建一个hash表, <子…...
2023年7月京东美妆护肤品小样行业数据分析(京东数据挖掘)
如今,消费者更加谨慎,消费决策也更加理性。在这一消费环境下,美妆护肤市场中,面对动辄几百上千的化妆品,小样或体验装无疑能够降低消费者的试错成本。由此,这门生意也一直备受关注。 并且,小样…...
记录Taro巨坑,找不到sass类型定义文件
问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了,没用。删了依赖重装也没用。后面在issue中找到答案了 解决…...
CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题
CS1988|C#无法在异步方法中使用ref,in,out类型的参数 🌀|场景: BlazorServer的场景中推荐使用异步方法,使用ref,out,in为参数前缀则报错CS1988 原因如下: ref parameters are not supported in async methods because the method may not h…...
ubuntu开机失败——ACPI Error
开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1)先用下面方法进入系统 2)更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图: 解决办法 1)先用下面方法进入系统 在GUN GRUB界面,选择ubun…...
搭建开发环境-操作系统篇(一键搭建开发环境)
概述 所谓工欲善其事必先利其器,搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说,很多东西都已经习惯成自然,也就没有刻意和初学者说。但对于很多初学者,却是受益良多。 这个系列,先从操作系统开始…...
人工智能AI绘画接入使用文档
人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…...
如何使用PyQt进行文件操作
PyQt是一个非常强大的Python GUI库,它可以帮助我们创建漂亮的跨平台应用程序。不过,在你开始使用PyQt进行文件操作之前,我想提醒你,这并不是在操作文件系统,而是在操作文件和文件夹。 首先,我们要导入PyQt…...
阿里云CDN加速器基本概念与购买开通
文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME? 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档:https://help.aliyun.com/product/…...
2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C
2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…...
[C++ 网络协议编程] 域名及网络地址
1. DNS服务器 DNS(Domain Name System):是对IP地址和域名(如:www.baidu.com等)进行相互转换的系统,其核心是DNS服务器。 我们输入的www.baidu.com是域名,是一种虚拟地址,而非实际地…...
Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?
文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 …...
使用U盘重装Windows10系统详细步骤及配图【官方纯净版】
文章目录 1.制作启动盘1.1准备U盘及一台电脑1.2下载win10安装包 2.安装操作系统2.1插入系统安装盘2.2设置启动盘为第一启动项2.3开始安装操作系统 3.安装成功后进入图形界面3.1启动问题3.2驱动问题3.3调出"控制面板"3.4给磁盘分区 4.win10激活 前天下午不知道怎么想的…...
数据结构之——(手撕)顺序表
本章会介绍的知识点如下图: 1: 顺序表的概念:顺序表是用一段物理地址连续的存储单元依次存储数据的线性结构,通常我们使用数组来表示,对数组进行增删查改。 顺序表的结构:逻辑结构与物理结构都是内存中一块…...
冠达管理:非银金融是什么?
非银金融(Non-banking Financial Institutions,简称非银)是指除了传统的银行以外的其他金融机构。与银行不同的是,非银金融机构没有颁发钱银的权利,但在金融市场中发挥着重要的效果。在全球范围内,非银金融…...
go 结构体
定义结构体 package mainimport "fmt"type Person struct {age, id intname, email string }func main() {var p Personfmt.Printf("p: %v\n", p)p.age 100p.name "jaja"fmt.Printf("p.name: %v\n", p.name)// 匿名结构体var P…...
C++学习笔记---- 引用
1、作用 给变量起别名 基本语法:数据类型 &别名 原名 示例: #include <iostream> using namespace std;int main() {int a 1;int &b a;cout << "a " << a << endl;cout << "b " <…...
2023国赛数学建模思路 - 案例:感知机原理剖析及实现
文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其…...
Cesium加载Supermap的wmts服务
最近使用cesium 加载supermap的wmts 服务,多次遇到加载异常与白页面问题,纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…...
C/C++:C/C++在大数据时代的应用,以及C/C++程序员未来的发展路线
目录 1.C/C在大数据时代的应用 1.1:C/C数据处理 1.2:C/C数据库 1.3:C/C图像处理和计算机视觉 1.3.1:导读 2.C/C程序员未来的发展路线 2.1:图导 1.C/C在大数据时代的应用 C/C在大数据时代中仍然是一种被广泛应用的编…...
linux RabbitMQ-3.8.5 安装
软件版本操作系统CentOS Linux release 7.9.2009erlangerlang-23.0.2-1.el7.x86_64rabbitMQrabbitmq-server-3.8.5-1.el7 RabbitMQ的安装首先需要安装Erlang,因为它是基于Erlang的VM运行的。 RabbitMQ安装需要依赖:socat和logrotate,logrotate操作系统已经存在了&…...
单链表Single-LinkList
0、节点结构体定义 typedef struct LNode{int data;struct LNode *next;} Lnode, *LinkList; 1、初始化 bool InitList(LinkList &L) //初始化 {L new LNode;if(!L){return false;}L->next NULL;return true; } 2、创建 (1)头插法 void Cr…...
AI嵌入式全景:各厂商、系列和开发工具的综合概览
要看几个方面 1 算力: 2 支持何种模型: 3 是否支持可视化的窗口系统: 一般而言各个平台均采用linux操作系统,官方提供对应SDK,安装好后可使用硬件加速资源。 而且如果要使用其硬件加速,一般都要完成模型转…...
湛江市建网站/微商软文大全
由于信道管理器在客户端和服务端所起的不同作用,分为信道监听器和信道工厂。和服务端的信道监听其相比,处于客户端的信道工厂显得简单。从名称就可以看得出来,信道工厂的作用就是单纯的创建用于消息发送的信道。我们先来看看与信道工厂相关的…...
怎么仿制一个网站/seo排名优化推广
很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.一,linux本身没有图形界面,linux现在的图形界面的实现只是…...
东丽做网站/免费发广告网站
1.采用简化的分批法计算产品成本时,在基本生产成本二级账计算得到的各项间接计入费用累计分配率,既是在各批完工产品之间分配各该费用的依据,也是在完工批别与月末在产品批别之间以及某批产品的完工产品与月末在产品之间分配各该费用的依据。…...
乐安网站建设/品牌营销公司
MyBatis 是支持普通 SQL查询。存储过程和高级映射的优秀持久层框架。MyBatis 消除了差点儿全部的JDBC代码和參数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,…...
java python 做网站/江苏seo和网络推广
3. 运行数据库部署工具 Windows中启动部署工具的三种方式: 选择『开始』|『程序』|『KingbaseES V8 』|『Client Tools』|『数据库部署工具』,启动数据库部署工具。 在Windows资源管理器中进入到数据库安装目录下$InstallDir/DeployTools,双…...
教育网站 php/免费发链接的网站
启动失败IDLE使用套接字在IDLE GUI进程和用户代码执行过程之间进行通信。无论何时Shellstart或重新启动,都必须建立连接。(后者用分隔线表示’RESTART’)。如果用户进程无法连接到GUI进程,则会显示一个失败的常见原因是用户编写的文件与标准库模块同名&a…...