当前位置:首页 » 安卓系统 » androidwebkit编译

androidwebkit编译

发布时间: 2023-08-26 03:51:06

Ⅰ Android 5.x 免 Root 升级系统 WebView

Android 的系统碎片化问题可以说是 Android 系统最大的硬伤了,自这个系统诞生以来十几年过去了,依然没能很好的解决,碎片化问题也是每个 Android 开发工程师心中的隐痛😂,每次处理系统碎片化带来的问题时,血压也能分分钟飙升到 200+,为了减轻其他同仁的痛苦以及此后再遇到类似问题能少踩几个坑,就之前的爬坑经历做个记录吧。

有关 WebieView 的重要性和其使用不是本文的重点,但是有几个相关的属性我们必须了解:

在Android4.4(API level 19)系统以前,Android使用了原生自带的Android Webkit内核,这个内核对HTML5的支持不是很好,现在使用4.4以下机子的也不多了,就不对这个内核做过多介绍了,有兴趣可以看下 这辩丛闷篇文章 。

从携弯Android4.4系统开始,Chromium内核取代了Webkit内核,正式地接管了WebView的渲染工作。Chromium是一个开源的浏览器内核项目,基于Chromium开源项目修改实现的浏览器非常多,包括最着名的Chrome浏览器,以及一众国内浏览器(360浏览器、QQ浏览器等)。其中Chromium在Android上面的实现是 Android System WebView ^1 。

从Android5.0系统开始,WebView移植成了一个独立的apk,可以不依赖系统而独立存在和更新,我们可以在 系统->设置->Android System WebView 看到WebView的当前版本。

从Android7.0系统开始,如果系统安装了Chrome (version>51),那么Chrome将会直接为应用的WebView提供渲染,WebView版本会随着Chrome的更新而更新,用户也可以选择WebView的服务提供方(在开发者选项->WebView Implementation里),WebView可以脱离应用,在一个独立的沙盒进程中渲染页面(需要在开发者选项里打开) ^2 。

从Android8.0系统开始,默认开启WebView多进程模式,即WebView运行在独立的沙盒进程中 ^3 。―― 节选自 如何设计一个优雅健壮的Android WebView?(上)

WebView 的包名在 AOSP 中的值是 com.android.webview ,该值是在 AOSP 构建过程中编译的版本,也就是说它是和系统一起被编译出来的,由于大部分的第三方手机制造商都有自己的定制 ROM,所以包名也是不尽相同,比如 MIUI ROM 中它已经被改为 com.mi.webkit.core 。从 WebView 的版本历史中可以看到自 Android 5.0 开始 WebView 移植成了一个独立的 apk,可以不依赖系统而独立存在和更新,这时候起 WebView 的包名就正式改为 com.google.android.webview 了。

所以这就是郑核为什么网上一堆人问为啥升级了一下系统 WebView ,App 内使用到 WebView 的地方或者是内置浏览器一碰就报 PackageManager$NameNotFoundException: com.google.android.webview 或者 PackageManager$NameNotFoundException: com.android.webview 之类的错误,这些问题在 Android 5.0 的机器上非常常见,因为你升级了 WebView 之后 TMD 包名都变了🤣,而 ROM 定制商一般在版本衔接时都很保守,所以即使系统升到了 Android 5.0 ,解决方案未必就是最新的,内置的 WebView 依然可能是硬编码进 ROM 的,所以系统环境引用的包名可能依旧是 com.android.webview ,你升级到 com.google.android.webview 它当然不认识了😂。

通过上面一通废话,你应该知道了,替换的坑就在如果你换上去的 WebView 包名和原内置的 WebView 包名不一致,就无法使用,所以就需要找一个包名一致的高版本 APK 了,还有一种方法是在系统目录某个配置文件里改个什么值,也就是包名引用,这样你就能换成任何包名的 APK 了,这个暂时没仔细研究,后续有结果了再更新。

APKMirror 是一个 APK 镜像站点,在这里可以找到很多 APK 的 release 版本以及历史版本,尤其 Google 全家桶系列的 APK 非常全,我们在这里根据需求直接搜索包名就可以了,我这里需要 com.android.webview ,检索到如下结果,可以看到这些都是从第三方 ROM 里提取出来的。

因为 Google 官方早在 WebView 40 的时候就已经将包名换成 com.google.android.webview 了,最新的是 72.xxx ,我翻了 15 页才找到最早改名并独立出来的那个版本😂。

adb connect 192.168.18.235

adb shell

su

mount -o rw,remount /system

这里原目录下的文件分别有 /webview/webview.apk 和 /webview/lib/arm/libwebviewchromium.so ,备份原目录:

cd /system/app
mv webview/ webview-b/
mkdir -p webview/lib/arm/

这里很简单,文件后缀 .apk 直接改成 .zip 然后解压缩,复制出 libwebviewchromium.so 即可

上传文件到设备 /sdcard ,然后执行如下命令移动过去,和原路径以及原文件名保持一致即可。

mv /sdcard/xxx.apk /system/app/webview/webview.apk

mv /sdcard/xxx.so /system/app/webview/lib/arm/libwebviewchromium.so

cd /system/app/
chmod 777 webview/*

adb reboot

如上一顿操作,其实也没什么难度,主要的坑就是包名一致的问题,还有一些系统目录访问权限之类的问题,之前网上搜了好多,都说不 root 没法换,或者换了会出问题,root 权限其实就是为了访问和写入系统目录,通过重新挂载就解决了,换了会崩掉的问题其实就是历史遗留问题,从 4.x 过度到 5.0 WebView 独立了,所以包名变了,或者是 ROM 定制方不按套路来导致换上去的 WebView 不被系统识别,只要找到合适的包就解决了。

Ⅱ 移动开发基础教程:Android是什么 安卓开发


Android是基于Linux内核的操作系统,是谷歌公司在2007年11月5日公布的手机操作系统,早期由谷歌开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以java编写。
一、简介
BlackBerry和iPhone都提供了受欢迎的、高容量的移动平台,但是却分别针对两个不同的消费群体。BlackBerry是企业业务用户的不二选择。但是,作为一种消费设备,它在易用性和 “新奇特性” 方面难以和iPhone抗衡。Android则是一个年轻的、有待开发的平台,它有潜力同时涵盖移动电话的两个不同消费群体,甚至可能缩小工作和娱乐之间的差别。
如今,很多基于网络或有网络支持的设备都运行某种Linux内核。这是一种可靠的平台:可经济有效地进行部署和提供支持,并且可直接作为面向部署的良好的设计方法。这首携链些设备的UI通常是基于HTML的,可通过PC或Mac浏览器查看。但并不是每个设备都需要通过一个常规的计算设备来控制。想象一下传统的家用电器,例如电炉、微波炉或面包机。如果您者孙的家用电器由Android控制,并且有一个彩色触摸屏,会怎么样?如果电炉上有一个Android UI,那么操控者甚至可以烹饪点什么东西。
二、Android术语
在Eclipse环境中开发Android应用程序需要了解Eclipse环境和Android平台的知识。了解以下术语会有助于用Eclipse插件开发Android应用程序。
Open Handset Alliance
这是一个由谷歌公司主导的组织,它由许多公共和私人组织组成。
Android
这是Open Handset Alliance的主打产品。它是一种针对移动设备的开放源码操作环境。
模拟器
模拟另一个系统的软件工具—这常常是在个人计算机(IBM、Mac、Linux)上运行的一个环境,它模拟另一个环境,比如移动计算设备。
Linux
一种开放源码的操作系统内核,许多计算平台都使用这种操作系统,包括服务器、桌面计算机、网络设备和移动计算设备。Android在Linux内核上运行。
Dalvik Virtual Machine
Dalvik VM是Android产品组合中的一种操作环境,它在运行时解释应用程序代码。Dalvik VM与Java VM相似,但是两者不兼容。
三、Android简史
Android平台是Open Handset Alliance的成果,Open Handset Alliance 组织由一群共同致力于构建更好的移动电话的公司组成。这个组织由谷歌领导,包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。从软件开发的观点看,Android正处在开源领域的中心位置。
市场上第一款支持Android的手机是由HTC制造并由T-Mobile供应的G1。这款隐山设备从设想到推出花了大约一年的时间,惟一可用的软件开发工具是一些实行增量改进的SDK发行版。随着G1发行日的临近,Android团队发布了SDK V1.0,用于这个新平台的应用程序也浮出水面。
为了鼓励创新,谷歌举办了两届“Android Developer Challenges”,为优胜的参赛作品提供数百万美金的奖励。G1 问世几个月之后,随后就发布了Android Market,它使用户可以浏览应用程序,并且可以将应用程序直接下载到他们的手机上。经过大约 18 个月,一个新的移动平台进入公众领域。
四、Android平台
Android平台被称为一个产品组合,因为它是一系列组件的集合,包括:
基于Linux内核的操作系统 Java编程环境 工具集,包括编译器、资源编译器、调试器和模拟器 用来运行应用程序的Dalvik VM
Android有丰富的功能,因此很容易与桌面操作系统混淆。Android是一个分层的环境,构建在Linux内核的基础上,它包括丰富的功能。UI 子系统包括:
窗口 视图 用于显示一些常见组件(例如编辑框、列表和下拉列表)的小部件。
Android包括一个构建在WebKit基础上的可嵌入浏览器,iPhone 的Mobile Safari浏览器同样也是以WebKit为基础。
Android提供多种连接选项,包括WiFi、蓝牙和通过蜂窝(cellular)连接的无线数据传输(例如GPRS、EDGE 和3G)。Android应用程序中一项流行的技术是链接到谷歌地图,以便在应用程序中显示地址。Android软件栈还提供对基于位置的服务(例如GPS)和加速计的支持,不过并不是所有的Android设备都配备了必需的硬件。另外还有摄像支持。
过去,移动应用程序努力向桌面应用程序看齐的两个领域分别是图形/媒体和数据存储方法。Android通过提供对2D和3D图形的内置支持,包括OpenGL 库,解决了图形方面的挑战。由于Android平台包括流行的开源SQLite 数据库,因此缓解了数据存储的负担。图1显示一个简化的Android软件层次结构。
五、应用程序架构
如前所述,Android运行在Linux内核上。Android应用程序是用Java编程语言编写的,它们在一个虚拟机(VM)中运行。需要注意的是,这个VM并非您想象中的JVM,而是Dalvik Virtual Machine,这是一种开源技术。每个Android应用程序都在Dalvik VM的一个实例中运行,这个实例驻留在一个由Linux内核管理的进程中,如下图所示。
Android应用程序由一个或多个组件组成:
活动
具有可视UI的应用程序是用活动实现的。当用户从主屏幕或应用程序启动器选择一个应用程序时,就会开始一个动作。
服务
服务应该用于任何需要持续较长时间的应用程序,例如网络监视器或更新检查应用程序。
内容提供程序
可以将内容提供程序看作数据库服务器。内容提供程序的任务是管理对持久数据的访问,例如SQLite数据库。如果应用程序非常简单,那么可能不需要创建内容提供程序。如果要构建一个较大的应用程序,或者构建需要为多个活动或应用程序提供数据的应用程序,那么可以使用内容提供程序实现数据访问。
广播接收器
Android应用程序可用于处理一个数据元素,或者对一个事件(例如接收文本消息)做出响应。
Android应用程序是连同一个AndroidManifest.xml文件一起部署到设备的。AndroidManifest.xml包含必要的配置信息,以便将它适当地安装到设备。它包括必需的类名和应用程序能够处理的事件类型,以及运行应用程序所需的许可。例如,如果应用程序需要访问网络 — 例如为了下载一个文件 — 那么manifest文件中必须显式地列出该许可。很多应用程序可能启用了这个特定的许可。这种声明式安全性有助于减少恶意应用程序损害设备的可能性。
六、所需工具
开始开发Android应用程序的最简捷的方式是下载AndroidSDK 和EclipseIDE。Android开发可以在微软Windows、Mac OS X 或Linux上进行。
本文假设您使用的是Eclipse IDE和用于Eclipse的Android Developer Tools插件。Android应用程序是用Java语言编写的,但是是在Dalvik VM(非Java虚拟机)中编译和执行的。在Eclipse中用Java语言编程非常简单;Eclipse 提供一个丰富的Java环境,包括上下文敏感帮助和代码提示。Java 代码通过编译后,Android Developer Tools 可确保适当地将它打包,包括AndroidManifest.xml 文件。
虽然没有Eclipse和Android Developer Tools插件也可以开发Android应用程序,但是那样就需要熟悉Android SDK。
AndroidSDK 是作为一个ZIP文件发布的,可以将该文件解压到硬盘上的一个目录中。由于有多个SDK更新,建议有意识地组织开发环境,以便在不同的SDK安装之间轻松地切换。
SDK 包括:
android.jar
Java 归档文件,其中包含构建应用程序所需的所有的Android SDK 类。
documention.html和docs目录
本地和网上提供的SDK文档。这些文档的主要形式为JavaDocs,以便于在SDK中导航大量的包。文档还包括一个高级开发指南和Android社区的链接。
Samples目录
Samples子目录包含各种应用程序的源代码,包括ApiDemo,该应用程序演示了很多API。这个示例应用程序可以作为Android应用程序开发的良好起点。
Tools目录
包含所有用于构建Android应用程序的命令行工具。最常用、最有用的工具是adb实用程序(Android Debug Bridge)。
usb_driver
该目录包含将开发环境连接到支持Android的设备(例如G1或Android Dev 1解锁开发手机)所需的驱动程序。只有Windows平台的开发人员才需要这些文件。
Android应用程序可以在实际的设备上运行,也可以在Android SDK 附带的Android Emulator上运行。图 3 显示Android Emulator 的主屏幕。
七、Android Debug Bridge
adb实用程序支持一些可选命令行参数,以提供强大的特性,例如复制文件到设备或从设备复制文件。可以使用shell命令行参数连接到手机本身,并发送基本的shell命令。图 4 显示在通过USB线连接到Windows笔记本电脑的一个实际设备上运行的adb shell命令。
在这个shell环境中,可以:
显示网络配置,网络配置可显示多个网络连接。注意这多个网络连接:
lo是本地或loopback连接。
tiwlan0是WiFi连接,该连接由本地DHCP服务器提供一个地址。
显示PATH环境变量的内容。
执行su命令,以成为超级用户。
将目录改为/data/app,其中存放用户应用程序。
列出包含某个应用程序的目录。Android应用程序文件实际上是归档文件,可通过WinZip之类的软件查看。扩展名为apk。
发出ping命令,查看Google.com是否可用。
从相同的命令提示符环境中,还可以与SQLite 数据库交互,启动程序以及执行许多其他系统级任务。想象一下您正在连接到电话,因此这是非常了不起的功能。

Ⅲ Android开发之WebView(一)配置&小技巧

背景:原生时间紧没时间开发任务量大的任务,而前端又闲着打酱油

方案:原生+webview混合开发

缺点:对于比较复杂的页面,webview在性能上力不从心;且与原生通信频繁也增加了隐藏的工作量

优点:能自带支持动态更新(js),能充分利用人力

webview是一个基于webkit引擎,展示web页面的控件。Android上的webview在低版本和高版本采用了不同的webkit版本内核,Android4.4(19)后直接使用了Chrome内核;WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求,页面加载,渲染,页面交互进行强大的处理。一般来说webview可单独使用,也可联合其工具类一起使用

移动应用的主体是webview,主要以网页语言编写,穿插Native功能的Hybrid App开发类型。激活webview为活跃状态,能正常执行网页的响应;当webview 的页面被失去焦点切换到后台不可见状态onPause时,需要通知自己暂停所有的动作,比如DOM的解析,plugin的执行,JavaScript的执行等

1,显示和渲染web页面

2,直接使用本地assets或者网络上的html文件作为布局

3,可和JavaScript进行互相调用

1,直接在布局文件里写死

2,动态添加进viewgroup中

注:不管以哪种方式,都必须注意webview的销毁,否则可能会造成内存泄漏最终导致内存溢出crash

下面是WebView的一些常用的方法列举,一些已经过时的方法未列出

下面是WebSettings的一些常用的方法列举,一些已经过时的方法就没有写出来了

一般不管是动态生成还是xml写死,只要处理好了引用持有问题,就能有效的避免内存泄漏;下面是我尝试的方案,在工具类WebViewUtils.java里封装好,在activity销毁的时候调用

1,清除webview缓存和记录

2,可以设置不启用缓存

3,H5的一些控件标签不支持导致的白屏

4,xml启用软件加速

5,通过menifest的来配置,在目标webview的activity设置

解决方案:

解决方案:

解决方案:

上一篇: Flutter入门-01-工程创建&目录介绍

Ⅳ 关于Android WebView的那些事

[TOC]

Webkit是一个开源浏览器项目,其中,对Android开发者来说,或多或少的都有些接触。 在应用层来看,最经常使用无非这么几个类:WebView(Android中最为复杂,也是最为简单的一个View,继承自AbsoluteLayout),WebViewClient、WebChromeClient(作为回调控制类)、WebSettings(进行设置项的配置)等;Webkit内部包含了网络请求、页面渲染、Js引擎等等。在Android4.4之前的版本中,系统使用的是Webkit内核,其后,切换到Google的Chromium内核。本文主要介绍的是在Android中,如何使用Webkit进行H5页面的展现,以及常见问题的分析手段。

下面的内容抄自网络 & 乱七八糟的地方,简单了解一下。

<b><i>前面都是吹牛逼的信息,如何使用Webkit来更好的搬砖? 且听如下分解</i></b>

XML布局中丢一个 <WebView> 标签,然后再 Activity 或者 Fragment 中 findViewById ,进而 loadUrl ,一般也没人这么简单的用,除非写Demo。很简单,它就是一个Layout,提供了一个调用加载页面的接口,不写范例了,能看到这篇文章的都看过Google的API说明。

主要涉及到WebView和WebSettings两个类。

例如:

其实就是WebView的父类ViewGroup和View的方法,不多说了。不过需要注意的是,不是所有的View或ViewGroup的方法对WebView都生效。

列举几类常用的,几乎所有App的 WebView 都会设置的属性:

</br>

如何处理页面跳转以及特殊 Scheme

这个回调可以说是最容易出问题的一个回调,表示什么? 字面意思,让你重写这个URL 的loading,比如点击html打电话的一个 <a href=“tel:110”> 标签,作为一个有节操、有责任心的浏览器,你需要处理 H5常用的几个Scheme :

除此之外,还有各个应用自定义的scheme ,举个例子,支付宝的支付Scheme : alipay: 。 这里的返回值,就代表你有没有能力处理这个url,没有的话Webkit就默认处理了。
需要注意的是,这个回调的触发的绝大多数情况是点击页面的 <a href="xxxx"> a标签,在Android中 loadUrl("http://www..com") ,是不会回调的,为什么不会回调,各位自行理解吧。

超链接 <a> 标签怎么写: 点我
特别说下窗口常见的两种打开方式:

针对单页模式的WebView框架(所有的html窗口均使用同一个WebView实例),不需要关注target的。
如果作为一个成熟的浏览器框架的话,是需要支持Html、JavaScript使用新窗口打开页面,需要实现如下回调:

还有一个相关设置项: WebSettings.
此时,系统将不会再回调 shouldOverrideUrlLoading 。新窗口逻辑的具体实现机制,可以参考系统browser实现逻辑。

<b> 这里有个坑 </b>
Android 4.4版本 ,如果实现了onCreateWindow,也就是说页面 <a> 标签是这么写的: <a href="http://www..com" target="_blank"> ,点击此链接打开的新WebView窗口,此窗口中的url点击,是不会触发 shouldOverrideUrlLoading 。 这是刚替换成Chrominum内核出的一个bug。本人并没在新版本上验证是否已经修复。

另外,根据不同的Rom,底层实现是不一样的,有的ROM会帮你处理各种调起scheme,也就是startActivity,有的ROM点一个url,就会抛一个intent出来,让用户选择系统浏览器进行加载。

系统默认,提供了一个接口:

有什么安全隐患呢?
戳这里

如果不知道Js怎么写, 请戳我

用PC的截图意思一下,看出区别了吧。 这里确定、取消点击以后就得调用 JsResult、JsPromptResult 的 confirm或者cancel。

因为安全问题,大一些的App Native与Js通信都不再用 WebView.addJavascriptInterface(Object) 了,都改用JsPrompt,因为JsPrompt中有message、有JsPromptResult可以返回给Js一些信息,所以桥选中了JsPrompt,另一个备选方案是JsConsole。

大体有这么几种方式进行传递

具体方案实现时,多方面考虑使用何种方式。

还有一个比较牛逼的

系统源码中均有方法注释,怎么用自己看吧。
那么问题来了

查了下,只有这两个相关的:
WebBackForwardList BackForwardList()
void clearHistory()
系统提供的关于历史记录的操作并不多,因为,不支持单条删除啊,啊啊啊!
WebViewClient中,还有一个相关callback,当系统更新历史记录时回调:
void doUpdateVisitedHistory(WebView view, String url, boolean isReload)

<b>相关问题分析法:历史栈回退错误的定位</b>

绝大多数回退错误是由于接口调用、回调中逻辑执行时序错误。
定位方法:利用 BackForwardList , doUpdateVisitedHistory 两个接口在 loadUrl、onPageStart、onPageFinish 以及逻辑相关的地方调用,打log,查看历史栈,这里注意下由于loarl是异步的,需要考虑是否加延迟等等保证调用时机的准确。
本人曾经遇到一个问题:在WebChromeClient中的 JsPrompt回调中,直接进行WebView.goBack操作,结果发现WebView确实回退到上一个页面,但是BackFowardList当前页面的index未更新的问题,具体见另一个篇blog。

网上有很多关于WebView内存泄露的讨论,据传,老版本的WebView在展示大量图片的时候,即使 WebView.destory() WebView=null ,也不会销毁。
在新版本上,实际测试结果:compileSDKVersion 23 不会泄露。
一般,我们如何销毁WebView比较保险?

这个问题好大。。。
暂时不介绍,另起blog进行说明。

解决方案:
实现回调 void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)

首先,提几个需要注意的点:

个人归纳总结几点:

step1 进入开发者模式,勾选“显示布局边界”;
step 2,回到你想查看的界面; step 3 假如内容区只有一层基本就是H5 WebView的,多个层级,就是Native。

看到左右图的差异了吧。
还有另一种方法,RD屌丝们看这里,特别说明,这种方法不太适合浏览器。 (自有内核,可能会不准确)

好了,就介绍到这里,零零散散的几年前写的文章,第一篇blog,如有不对的地方,还恳请大家指正。

Ⅳ 安卓Android软件开发用什么语言

Android以Java为编程语言。

操作系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机(Virtual Machine)。 Bionic是 Android 改良libc的版本。

Android 同时包含了Webkit,所谓的Webkit 就是Apple Safari浏览器背后的引擎。Surface flinger 是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。

Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。

(5)androidwebkit编译扩展阅读:

安卓软件开发学习内容

Android基础阶段:平台架构特性(JAVA/C) Market/应用程序组件 环境搭建与部署/打包与发布 AVD/DDMS/AAPT 调试与测试 相关资源访问/资源制作 。

Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及深层实现。

Android进阶初级:组件Widget/ 菜单Menu/ 布局Layout 详解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL数据库原理, SQLite /SharedPreferences/File详解 多媒体Audio/Video/Camera 详解。

Android进阶高级:蓝牙/WIFI SMS/MMS 应用实现 深层次解析GPS原理,实现。LocationManager/LocationProvider 进行定位/跟踪/查找/趋近警告以及Geocoder正逆向编解码等技术细节。

2D图形库(Graphics/View)详解 SDCARD/传感器/手势 应用实现。

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:427
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:552
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:738
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:531
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:141
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:227
java驼峰 发布:2025-02-02 09:13:26 浏览:646
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:527
linuxadobe 发布:2025-02-02 09:09:43 浏览:207
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:721