自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(310)
  • 资源 (4)
  • 收藏
  • 关注

原创 Input的Move事件相关的深入疑问/getHistorical剖析/批处理事件

近期有学员朋友在群里提出了关于input模块中的一个批处理相关的疑问点。针对这个批处理这块知识点,马哥不打算直接给大家blog输出干货给大家,即不准备直接给大家喂相关的知识点,而是采用给大家布置几个作业疑问点方式,让大家积极参与进来思考的方式。如果针对move事件不采用批处理方式,也和down事件一样,有事件来了就直接进行相关的派发主线程处理,那么可能会造成什么样的后果呢?为什么会需要有这个方法?好了上面就是留给大家关于input相关的思考作业哈,后续马哥这边会给大家进行剖析解答,更新到相关的vip群中。

2024-11-01 10:01:48 227

原创 性能优化/开机时间优化之开机动画部分讨论-学员讨论

针对开机时间优化,如果其他地方实在做不出来更多优化后,可以考虑看看自己开机动画是否有优化的空间,确定有优化空间后再考虑具体方案进行,这里注意一定要考虑交互体验等结合起来。不然优化后会引入一堆的闪黑,开机动画播放不完整等问题就得不偿失。

2024-10-25 11:19:39 614

原创 分享其他简单GMS全家桶预制方案

这个包已经帮我们干了所有的事情,比如预制apk,预制权限xml等,对于我们只需要无脑调用这个目录下的gms-vendor.mk既可以实现gms等整个打包和权限预制。上,文章发布后还是有很多学员朋友纷纷提出更多的更简单的一些方案,在这里也给大家分享一下其他更加简单的两种方案。明显看到这里gms的应用更加多,根本不需要整体预制根本不需要挨个下载apk这种方式,所以这个方法相对更加简单。这种方案就是直接刷入相关人家做好的img,自己基本上没办法来定制,灵活性很差,只能说拿来用的方式。

2024-10-24 10:38:50 561

原创 安卓高级系统工程师必备技能-技术大佬成长必备技能

简单说就是平时负责工作中经常会遇到一个全新的知识模块,这个全新的知识模块可能处于无资料,无人帮助的状态。无资料即互联网上搜索不到任何的内容,公司里面也没有任何文档等,属于全新的一个模块,这种情况其实还不少,比如google某个版本可能新增加了一个新模块,这种当然哪里都找不到资料。无人帮助因为很多时候公司里面就一个人负责一个模块,其他人也不会去深入研究你负责的相关模块,所以新出来的模块公司更不可能有其他人懂了。

2024-10-22 09:37:59 259

原创 aosp15上自由窗口入口无法显示aconfig等新知识剖析

这里最后只要可以通过getShortcuts走到底部的Collections.singletonList那就说明可以显示出来,所以这里显示不出来肯定是没有走到底部这个Collections.singletonList,说明是在前面的两个if返回了null,具体哪里返回了?哈哈,到这里大家是不是终于看到熟悉的Properties了,你是不是和马哥一样认为这里其实就是普通的prop,如果这样认为其实就是完全错误的哈,具体这里Properties是啥,这个就有需要了解新版本上使用的类似config机制。

2024-10-21 00:53:34 602

原创 Ubuntu20.04编译安卓aosp 15源码编译到模拟器运行

aosp15也开始悄悄在各个手机厂商开始酝酿了,感叹时间很快,今天也准备针对aosp15进行一下源码环境的搭建,整体aosp15的搭建和13/14其实没啥大的差别,只不过在lunch目标这个地方确实很大不同,还有就是模拟器启动后的大小不太合适。那么第一部分的Product是如何确定的,这里怎么就知道是sdk_phone64_x86_64,而不是以前的sdk_phone_x86_64。第一部分:aosp_cf_x86_64_phone这个是可变的,需要根据我们自己情况选择,具体怎么选稍后说。

2024-10-20 00:30:29 807

原创 安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析

NO_INPUT_CHANNEL主要给一些窗口完全不需要消费任何输入事件的情况,经典使用该flag窗口有SnapshotStatingWindow,ActivityRecordInputSink等。

2024-10-19 01:02:17 440

原创 android app执行shell命令视频课程补充android 10/11适配-千里马android

hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android 8.1平台没有什么问题,但是学员想要自己适配到android 11上,估计也是目前最新的android版本,因为普遍android S厂商都还没有发布,因为android 的大版本升级适配本身工作也不小,这里就对android app执行shell命令这一部分进行一个升级适配的补充,尽量让买课的学员可以直接用于最新的android版本。具体项目代码和详细视频讲解可以购买我的相关视频。

2024-10-16 14:39:30 874

原创 aosp14分屏分割线区域部分深入剖析-framework实战干货

核心看看这里的topPosition,bottomPosition是怎么计算的,刚好也可以解释为啥这里名字有16_9这个字符,其实本质就是计算个topPosition位置,拿竖屏来举例的话,这里因为想要屏幕宽度固定的,为了美观程度,所以一般topPosition这个区域要固定为一个16:9区域。上面已经分析出了分割线的几个SnapTarget,这些SnapTarget都是有固定位置的,那么接下来分析一下分割线如何到对应的SnapTarget。

2024-10-16 12:08:09 1005

原创 安卓疑难问题冻屏/黑屏深入剖析原因-全网独家framework实战

明显可以看出来这里正常情况有相关的finishRecentsAnimation操作,但是异常情况下没有finishRecentsAnimation,这个其实也可以判断出来异常冻屏的本质原因是因为没有进行相关的finishRecentsAnimation操作,即相当于动画在执行,但是因为某些异常没有得到良好收尾操作,从而导致问题。其实TaskBar的隐藏本身系统中有更好的方法,不应该自己做的这种隐藏TaskBar的主View即mDragLayer方法,完全可以源头 上进行规避。

2024-10-12 16:24:43 854

原创 安卓冻屏bug案例作业分享-千里马学员wms+input实战作业

近期有学员反馈在aosp14高版本上有了一个新窗口TaskBar,这个但是有需求就是对这个TaskBar进行隐藏,所以有一个需要对这个TaskBar进行进行隐藏需求。因为要实现一个对TaskBar隐藏需求功能,所以这里需要先实现这个需求,正因为实现这个需求后才发现可以复现这个冻屏问题。2、分析出来了冻屏原因,再考虑怎么屏蔽TaskBar就会用法该bug,为啥TaskBar存在就不会有该bug。这里普通的手机是无法看到TaskBar,需要进行相关density进行设置,变成平板设备才可以。

2024-10-11 14:22:05 577

原创 安卓系统属性persist类型prop深入剖析

近来学员朋友在群里问道了prop属性值进行持久化存储相关的问题,针对prop大部分情况下都是在代码端进行get获取读取操作,因为很多系统属性都是ro类型的,即不可以修改的,有一些debug可以修改的属性,但修改重启又变成了空,所以有是否可以持久化存储的prop,并且可读可写这种,那么就是今天要讲解的persist属性。可以看到只要是persist.sys. 开头的都是定义为了system_prop,所以system_server进程写入数据等都不需要额外编写,因为直接有的。2、selinux部分。

2024-10-09 14:35:10 898

原创 安卓如何实现双击触摸唤醒点亮屏幕功能-源码分析linage os高通平台

实际上到这里就很清楚hal中干的事情,就是对/sys/class/touch/tpnode/synaptics/wake_gesture写入对应的值0或1,具体也可以通过设置中开关,然后验证/sys/class/touch/tpnode/synaptics/wake_gesture的值。可以看出这里会依次加载aidl,hidl等接口,正常有aidl就会直接返回,没有就再加载hidl接口,这里的就需要结合具体设备上power hal的提供情况。具体对DOUBLE_TAP_TO_WAKE的处理。

2024-10-08 16:05:03 959

原创 安卓如何实现双击触摸唤醒点亮屏幕功能-Android framework实战开发

驱动层面实现方案为啥成为各个厂商主流方案,主要有以下几点:1、完全不需要修改任何的framework层面代码,不需要修改破坏任何的原生power逻辑2、驱动部分直接就识别了双击,然后上报的一个KEY_WAKEUP事件,非常简单的实现了唤醒设备更多framework详细代码和资料参考如下链接。

2024-10-07 11:57:55 1396

原创 Android.mk中宏定义的高级用法剖析-安卓framework高级实战

上面就是一个经典使用mk传递具体的系统的节点路径到cpp代码中,cpp代码中就可以方便根据mk传递进来的字节节点路径进行相关的设置。使用该方法可以大大提高代码的灵活性,大家可以设想一下,在一套代码需要适配不同的产品目标时候,可以使用同一套代码逻辑来实现,差异变化的路径部可以在Product.mk中进行定义,不同的Product也可以设置不一样的节点路径。

2024-10-05 23:16:11 561

原创 汇总binder相关一些常见面试题-安卓系统常见面试题

跨进程通讯一般都需要通过ServiceManager进行getService获取bpbinder,但普通app经常使用系统组件Service的bindService进行跨进程通讯也可以获取bpbinder,这个是啥原理?binder中有多个进程作为客户端通过servicemanager获取service的bpbinder,bpbinder都会有一个handle,那么多个进程获取同一个service对应的handle一样么?请描述一下binder通讯起来后,需要新开binder线程的创建是怎么一个过程?

2024-10-02 10:29:22 438

原创 android12/13/14版本wms最新面试题:dumpsys window和sf一定会一致么?

针对这个问题,其实就是说window结构树顺序依赖关系和sf的Layer结构树依赖关系居然不同,大家也知道正常情况下肯定要一模一样,因为Layer虽然可以新加入,但是不能说原来的window对应的Layer结构树顺序都乱了,这样可能会造成显示类的bug。基于上面这个2个面试题,其实本质上是对wms还有surfaceflinger相关知识的深入考察,而且问题属于难度等级层次分明,慢慢变大的情况,所以要完全可以拿捏对这问题,基本上wms部分的知识考察就可以得到面试官的高度认可打高分。

2024-09-29 00:22:53 995

原创 android锁屏界面userActivity自动息屏深入剖析

一旦亮屏时候有用户触摸手机屏幕,那么肯定进入息屏的时间就需要从手机最后触摸时间开始计算,这里手机触摸后就会触发userActivity方法,跨进程到pms中进行统计时间的更新。、锁屏画面不停的点击触摸发现锁屏画面会一直常亮,这里他知道锁屏这个window比较特殊,正常其他window在InputDispatcher进行事件传递时候都会进行userActivity时间的更新,但是锁屏画面是有屏蔽userActivity操作,所以认为锁屏画面哪怕一直点击也不应该阻止息屏。这里的对于手机自动息屏部分有啥差异呢?

2024-09-27 00:37:23 1187

原创 安卓桌面Launcher负一屏如何实现各种方案比较设计

近来很多学员朋友有和我聊到负一屏如何开发设计,针对这个桌面的负一屏功能实现其实在国内厂商还有pixel产品版本都是有的,负一屏主要作用就是实现一些新闻,资讯,快捷服务,游戏宣传等互联网功能

2024-09-26 13:11:24 983

原创 安卓系统常见问题如native crash,卡顿卡死定位工具命令技巧-android framework实战开发

有学员朋友近来有问到一些安卓系统开发过程中的一些核心小技能小技巧等,比如native crash在企业里面该如何准确定位具体代码函数,程序卡住,或者长时间没反应,想要看看卡在代码的哪里。针对以上的一些问题,我这边分享一些工作中常用积极该类问题的一些辅助工具命令技巧,帮助大家更好的在工作中定位这类问题。经常调试偶尔发现app可能卡住,没反应的情况,这个时候就很希望知道卡住这时候的进程的一个运行情况,希望可以得到一个和anr trace一样的文件来方便分析定位线程状态,即想要获取进程的backtrace。

2024-09-24 17:17:24 957

原创 如何基于scrcpy改造实现大厂一键连招/触摸宏功能(带java源码)-千里马安卓framework实战

已经分享过如何实现这种大厂里面一键连招,触摸宏的功能,原理本身是对dev/input下面的节点进行读取保存文件,然后在读取文件进行写入dev/input下面的节点,从而实现了触摸事件的读取和写入,不过这个一定要root的手机版本。很多同学就提出是否可以考虑参考scrcpy的事件注入,即已经实现了触摸注入了,只需要再额外补充一个事件的录制保存文件既可以。可以看的出这里重点的方案就是scrcpy如何获取用户的触摸事件,即要监听到全局的触摸事件。通过上面几步骤就完成了监听触摸事件保存到文件的操作。

2024-09-23 11:09:30 765

原创 android编译make详细过程日志查看showcommands/verbose.log

这里注意verbose.log.gz是在out的根目录查看既可以,但这里需要注意一下,它一般是编译几次就有几个这种verbose.log.gz,末尾加了数字,比如verbose.log.1.gz,verbose.log.2.gz的方式。这样就直接有对应的apk,或者bin文件了,具体这些apk或者bin文件是如果生成的其实一点都不清楚,那么有没有什么方法可以看到这些bin文件或者apk的是如何生成的呢?第二步:处理AIDL文件,生成对应的.java文件(工程没有用到AIDL,那这个过程就可以省了)

2024-09-20 15:43:27 1306

原创 安卓Settings值原理源码剖析存储最大的字符数量是多少?

1、settings相关的数据最后是存在xml中,app层面都是通过SettingProvider调用到systemserver进程进行保存2、xml中写入相关字符时候,对字符长度有限制,是65535,一旦比这个大则会写入异常更多framework技术干货,请关注下面“千里马学框架”

2024-09-19 13:00:26 1238

原创 android 14分屏实战之小米su7的3分屏实现方案讨论及线索征集

调研竞品是如何实现的方案,那当然需要有竞品的设备,可以进行相关的dumpsys,这里因为手上没有su7的车机和汽车可以进行dump,所以暂时没办法进行实际的dump设备查看,即无法分析出小米su7是如何实现的这个3分屏。好了暂时想到就是上面3个方案,其实还是比较推荐方案1,毕竟交互动画体验可以较多的复用2分屏,但是复用也意味着修改较多原来的逻辑,这个暂时还没有时间实战实现这个功能,各位学员们有兴趣可以去尝试实现一下。彻底不使用原来的分屏方案,使用自由窗口方案,整体的3分屏,其实就是3个自由窗口显示着。

2024-09-18 11:33:03 1152

原创 InputDispatcher的调试日志isLoggable动态开放logcat实战使用

就是检测一下log.tag.InputDispatcherDispatchCycle这个属性设置的log输出级别,如果没有设置默认就是有INFO,那么__android_log_is_loggable就会返回false,如果log.tag.InputDispatcherDispatchCycle有设置为DEBUG,则返回true。注释其实很详细了,简单说这个方法检测指定的tag是可以在这个level进行打印,默认等级是INFO,而且是可以通过setprop来进行控制的这个tag的输出level。

2024-09-16 01:43:56 883

原创 aosp14上SystemUI相关的调试堆栈乱码无法对应行号,logcat无法输出

首先只是在SystemUI进程里面打印堆栈才会出现堆栈是乱的一堆hash码一样的,但是SystemUI是可以正常运行的,系统进程和其他apk是正常的,说明这个可能这个apk是被优化了,那么控制apk优化一般是在编译的Android.bp里面控制。正常情况下一个普通app直接调用Log.v肯定是可以输出日志的,所以Log.v无法打印,那么第一怀疑是不是有源码中针对systemui进程有单独的过滤拦截。那么怀疑点就得回到SystemUI代码,这里也可以对apk进行反编译看看,是不是被编译时候混淆去除了呢?

2024-09-15 10:57:11 1046

原创 安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制

更多framework技术干货,请关注下面“千里马学框架”

2024-09-15 01:21:36 1135

原创 Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

MiracastMiracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。

2024-09-13 15:09:55 1479

原创 android14多屏幕帧率刷新率统计显示开发及成果展示

但是近来有学员提到一个疑问,那就是如果是存在多屏的情况下,而且多屏都在刷新的情况下,那么帧率显示起来就比较乱,因为原来方案基本上都是有layer显示就会累计,根本不管到底是哪个屏幕的。在SurfaceFlinger课程专题有做了一个帧率显示的工具,大部分在当时的代码大部分在SurfaceFlinger层面实现的。4、在computFps时候,针对拿layer的dispkayID和prop获取的displayID进行比较,相等则可以统计。1、针对layer需要获取每个layer的对应的displayID。

2024-09-12 16:39:58 681

原创 投屏开发调试技能-pcm数据转wav格式文件源码实战分享

Wav简单介绍WAV即波形声音文件格式 (Waveform Audio File Format,简称WAVE,因后缀为*.wav故简称WAV文件),其采用RIFF(Resource Interchange File Format,资源互换文件格式)结构,并符合(RIFF)规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。

2024-09-11 11:59:50 986

原创 systrace/perfetto第三方app的Trace.beginSection方法无效问题和TAG开放剖析

有针对native的c++代码,也有系统app的java代码,但是缺少了普通第三方app如何打印trace,有学员朋友在第三方app尝试打印trace时候发现了一些问题,那就是使用perfetto抓取的trace死活没有自己打印的trace,马哥这边经过验证也确实有存在相关的问题,下面针对第三方app没办法打印trace问题来进行详细的分析。下面分别分析一下普通tag和ATRACE_TAG_APP是如何进行设置的,这里为了简单方便拿atrace代码来分析。//trace代表结束,与上面方法成对出现。

2024-09-09 11:38:28 995

原创 android framework工程师遇到成长瓶颈迷茫怎么办?千里马经验分享

上面提到的几点就是我这边给一些framework的老工程师在公司工作过程中遇到瓶颈如何提高的方法,相信按上面的方法做了以后你一定可以突破瓶颈,找出新的方向,技术上升一个档次哈。

2024-09-08 10:22:28 1077

原创 安卓framework单屏幕Display秒双/多屏互动相关需求改进-wms实战开发

一些vip学员朋友也纷纷求助马哥的实现patch代码,想用于公司的实战项目实现。但是在公司需求实现要求和马哥这边的实现还是会有一些需求上的变更和设备环境差异,所以使用过程中学员朋友们也提出了一些额外的问题。这个问题其实在马哥自己设备上从来没有发现过,但是有的vip学员朋友和我反馈有这种黑屏不显示情况,针对这个问题第一时间进行了分析,主要通过提供的dumpsys SurfaceFlinger来查看。2、因为上下结构已经实现,如果左右结构,针对触摸部分,如果左右结构需要更改触摸区域的宽度变宽。

2024-09-08 09:00:00 915

原创 安卓aosp14上自由窗口划线边框Freeform Caption实战开发-千里马framework实战

因为Caption是属于单独的图层,和Activity的图层都不在一个,而且Caption图层是显示在Activity图层的顶部,而DecorView等明显是Activity图层的一个View,边框红线自然就被Caption栏给遮挡了。即新建一个划线图层处于Caption图层的上面,这样划线图层就可以在自由窗口最顶部进行显示,不会被遮盖,具体实现其实就可以同样参考Caption实现 ,搞一个Windowless的窗口进行绘制。即自由窗口在被触摸放大缩小时候,边框要被画成红色的线条,表示选中。

2024-09-05 16:04:49 866

原创 如何实现对窗口window的viewtree进行dump Hierarchy-安卓framework实战开发

可以看到确实只有Activity的dumpInner里面才有调用这个ViewRootImpl的dump方法,没有看到有其他普通window啥的对这个ViewRootImpl进行调用,并没有发现在window相关的地方有调用这个ViewRootImpl的dump方法。有学员粉丝朋友在群里面问到一个如何针对普通的window进行dumpsys相关的viewtree问题,即展示每个window的view的层级树。但是针对普通window却没有发现有和activity一样好用的命令,可以直接dump。

2024-09-03 10:29:26 1139

原创 aosp13/14上自由窗口实战开发之CaptionWindow原理差异分析

注意这里的这里的CaptionWindo其实并不可以通过dumpsys window windows这样方式看到它,说明它本身不是一个windowstate,不受窗口层级结构树管理。拖拉上面的CaptionWindow部分。边角触摸点击拖拽放大。

2024-09-03 09:30:24 405

原创 aosp13自由窗口项目出现图库app划线不全bug修改-安卓framework实战项目

上面已经分析清楚了本质是因为有了SurfaceView以后,系统会设置对应的TransparentRegionHint导致最后的Activity的Layer只显示在非SurfaceView部分,SurfaceView部分区域直接不会被绘制。图库的Activity因为有一个SurfaceView,这里的SurfaceView会导致有单独的Layer,真正显示红框部分属于非SurfaceView部分,但是SurfaceView部分的就完全没有显示出来。那么上面的HWC的输出中为啥Layer又确实被切割了呢?

2024-09-01 15:27:57 1066

原创 android 14版本的winscope编译使用-手把手教你编译成功不报错

可以看到报出很多Module not found: Error: Can’t resolve ‘flicker’,Module not found: Can’t resolve 'fs’或者是Module not found: Can’t resolve 'path’等错误,各自缺少库啥的错误,这类问题就是将所以粉丝们卡住的关键啦,这类靠百度一个个改基本不可能哈,还有我们做android的对这块npm报错其实不是那么擅长,修改确实只靠百度。,黑屏等分析时候,有详细讲解winscope使用方法。

2024-08-29 17:47:54 1138

原创 如何让mk中全局变量控制Android.bp的编译参数-安卓项目定制化开发

之后很多学员朋友反应,现在Android.mk在aosp中官方控制的编译的项目太少了,是否有可以支持Android.bp的项目。大概可以看出是mk变量通过call add_soong_config_var来设置到Android.bp中。把BP_FLAG_TEST变量设置到soong config中,这里其实就是mk可以和bp沟通的最重要桥梁。2、core/android_soong_config_vars.mk 加入相关的设置。也可以把mk的BP_FLAG_TEST相关标志变成false,再进行编译验证。

2024-08-28 17:43:30 796

原创 android cpp源码中ifdef定义变量如何在Android.mk中进行控制-手把手实战成功

添加路径添加了USE_TEST_MK :=true这个flag。

2024-08-28 12:37:19 689

千里马android framework学习课程资料下载

千里马android framework学习资料下载 车载车机系统开发,android 系统源码 aosp 11/12/13/ wms学习,android系统闪黑问题解决 车载多屏互动实战项目经验 surfaceflinger图层实战应用 input全局触摸实战 冻屏触摸问题分析实战 深入理解framework重点模块wms 胜任wms相关的需求开发 掌握系统闪黑,冻屏疑难问题解决 成为业界wms/ams模块专家打下基础

2023-06-28

新加一个app源码到packages/apps编译Android.mk

Android Framework开发之新加一个app源码到packages/apps编译Android.mk配置 hi,粉丝朋友们大家好! 近来有朋友反馈在看我的android framework实战开发合集课程时候 (https://download.csdn.net/combo/detail/2202) 需要购买可以参考直接找千里马最优惠:https://blog.csdn.net/learnframework/article/details/124086882

2022-04-16

haxm-windows_v7_5_1新版本github.zip

Enable VT-x in your BIOS security settings, ensure that HAXM is installed properly. Try disabling 3rd party security software if the problem still occurs.问的解决方法 原文链接:https://blog.csdn.net/learnframework/article/details/117537868

2021-06-04

Android Framework学习资料,系统开发,Framework开发

千里马android framework学习资料下载 车载车机系统开发,android 系统源码 aosp 11/12/13/ wms学习,android系统闪黑问题解决 车载多屏互动实战项目经验 surfaceflinger图层实战应用 input全局触摸实战 冻屏触摸问题分析实战 深入理解framework重点模块wms 胜任wms相关的需求开发 掌握系统闪黑,冻屏疑难问题解决 成为业界wms/ams模块专家打下基础

2021-05-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除