當前位置:首頁 » 安卓系統 » android中Framework

android中Framework

發布時間: 2022-11-19 08:09:11

㈠ Android開發應用層需要了解 framework層嗎

不同的android版本,不同的framework實現,framework有近2億行代碼,版本越高,代碼行數越大,這個過程是很痛苦的。所以不要去學習和閱讀framework的源代碼。

閱讀它的源代碼,還不如去學英語,多看應用層的API,多看理財的書籍。

如果不做framework開發,做app開發的話,看了framework的代碼對app開發的幫助是很少的.

1、首先覺得你的題目和問題描述不太搭邊。你所說的復雜功能效果實際上幾乎都是應用層的,和framework不搭邊。因為如果只是做應用開發,那就完全依賴現成的基礎組件和介面,最多自定義一下組件和布局。你在網上找到的很流暢很美觀的現成組件都是別人自定義之後封裝的。別人能做,實際上你應該也能做。多看看別人的demo,試著對你不滿意的地方做點改進,總會有收獲。一旦覺得有點心得,記錄下來或者把你封裝的東西拿出來讓大家用用,一起討論討論,必然收獲更多。

2、關於framework,更多是做的應用層之下的系統層面的東西。比如電源管理、消息隊列、包管理等等,還包括對硬體的支持及系統提供給上層的硬體功能調用介面。framework的學習必然離不開不斷編譯rom和刷機。這就要求有耐心有時間有興趣。而且由於framework層多數模塊都是以JNI方式被調用的,因此你需要有比較扎實的C語言基礎,之少能看懂程序結構。除此之外,對你想要詳細研讀的模塊在應用層的應用需要有必要的理解。我剛開始看源碼的時候是從電源管理模塊開始看的,就是因為當時對android系統自帶的電源提醒方式以及電量通知不太滿意,想重新定義更多層級的提醒。剛開始也是一頭霧水,但還是硬著頭皮一點點啃。這個過程中,為了防止忘記之前看過什麼,所以又不斷對看過的源碼做注釋並做閱讀筆記。大概兩三個月,雖然了解得也比較淺顯,但是我的目的達到了。源碼之路漫漫,看個三五年都不一定敢說能夠整體吃透。雖如此,但只要有鑽研的方向和基本的能力,相信工作中遇到的framework層的改動應當還是能夠負擔得住的。

3、如果不想深入framework,其實你也可以做android系統應用的開發。這一步幾乎和上層應用開發差不多,不過可以調用的庫更豐富,許可權更高罷了。這個可以自己研究,參照android系統出場自帶的應用。

說了這些。希望能夠有點幫助。

㈡ AndroidFramework 之啟動 ServiceManager

本文源碼基於 Android 10 ,涉及相關源碼如下。

ServiceManagaer 是 Binder 的守護進程,在 Binder 機制中起著重要的作用。本文將從源碼的角度對其進行分析,整體流程如下:

時序圖如下。

先來看看 ServiceManager 是如何啟動的:

在 Zygote 一文中說過, init 進程啟動的第二階段會解析 init.rc 文件。

在這之後會觸發 trigger init 。

結合 init.rc 看看 action init 做了什麼。

當觸發 trigger init 後,會啟動 servicemanager 服務,其聲明如下。

對應的執行文件為 /system/bin/servicemanager ,在編譯前位於 frameworks/native/cmds/servicemanager 下,來看看 Android.bp 。

其對應的源碼為 service_manager.c 和 binder.c ,入口函數 main() 位於 servicemanager.c 。

啟動完 ServiceManager 後會打開 Binder 驅動。

在 main() 中首先調用 binder_open() 。

binder_open() 主要做了如下事情:

給結構體 binder_state 分配內存。

系統調用 open() 打開 /dev/binder ,如果打開驅動失敗,則執行 fail_open 釋放內存。

簡單的解釋一下什麼是系統調用?

由於需要限制不同的程序之間的訪問能力,防止程序獲取別的程序的內存數據, CPU 劃分出兩個許可權等級, 用戶態 內核態

所有的用戶程序都是運行在用戶態,但有時需要做一些內核態的事情,而唯一可以做這些事情的就是操作系統,所以程序需要向操作系統發起請求,以程序的名字來執行這些操作。這時就需要一個從用戶態切換到內核態但不能控制內核態中執行的機制,這種機制就是 系統調用

系統調用 ioctl() 傳入 BINDER_VERSION 命令獲取 Binder 驅動版本,對比版本是否一致,不一致則執行 fail_open 釋放內存。

系統調用 mmap() 映射 128kb 的內存空間,即把 Binder 驅動文件的 128kb 映射到內存空間供 ServiceManager 使用,內存映射失敗則執行 fail_map ,關閉 fd 並釋放內存。

ServiceManager 進程 mmap 的內存大小可以通過 adb shell 命令查看。

可以看到內存映射地址為 0xf10f8000 ~ 0xf1118000 ,差為 0x20000 即十進制的 128kb 。

打開 Binder 驅動後會將 ServiceManager 設置為上下文管理者。

調用 binder_become_context_manager() 。

android 10 新增 BINDER_SET_CONTEXT_MGR_EXT 命令來設置安全的上下文管理者,如果設置失敗,則使用原有的 BINDER_SET_CONTEXT_MGR 命令來設置上下文管理者,兩者區別在於是否攜帶參數。

最後會進入循環,從 Binder 驅動讀取和解析數據。

調用 binder_loop() 進入循環,不斷地通過系統調用 ioctl() 從 Binder 驅動讀取數據,並通過 binder_parse() 進行數據解析。

注意這里調用 binder_loop() 傳入的 svcmgr_handler() ,後面會使用到。

binder_write() 會封裝 struct binder_write_read ,並通過系統調用 ioctl() 將對應的命令傳遞給 Binder 驅動。

binder_parse() 用來解析從 Binder 驅動讀取到的數據,然後根據不同的命令執行對應的操作。

因為 cmd 命令可能有多個,所以通過 while 循環每次處理一個 cmd 命令,多 cmd 的結構大致如下圖所示。

這里重點看下 BR_TRANSACTION 命令。

BR_TRANSACTION 是 Binder 驅動向 Server 端發送請求數據。

binder_transaction_data 的結構如下,其表明了 transcation 傳輸的具體語義,語義碼記錄在 code 中,不同語義碼攜帶的數據是不同的,這些數據由 data 指定。

在解析完 binder_transaction_data 的具體語義後,會調用前面傳給 binder_loop() 的 svcmgr_handler() ,其實就是 switch case 語義碼做不同的事情。

ServiceManager 的功能其實很簡單:

至此 ServiceManager 就分析完了。

㈢ android framework具體工作是什麼

說簡單點,Framework具體的工作也就是為android應用開發的開發人員提供了一系列的服務和API的介面。
同事負責應用程序生命周期和資源等進行管理。
如果說你想了解framework 的內容,那需要關注android系統層內容。了解android系統架構。

㈣ android framework層是用於開發什麼

framework的開發比應用層就要煩的多啦。做應用在eclipse中就足夠了,用android系統中的控制項等工具,或者是自己寫個類來實現特定的功能。而framework層的開發,需要往源碼中添加代碼、xml、圖片、id等等數據,這個id可是費了我好大的勁才搞定的。在項目開始的一個半月里,我探索、嘗試了很多,現在把我的經驗分享出來。網上關於framework層的開發信息很少,多是靠自己。
最有效的方式就是分析android的源碼,看google是怎樣實現一個類的,以及類的層次。我現在看的主要是widget和app中的代碼,其他的還沒涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的類,也是代碼量很大的類,我只是大概地過了下,還沒有仔細分析過。

我花大力氣的地方是資源文件夾下values中幾個文件的作用。

attrs.xml中定義的是類的屬性,屬性是為了能在xml文件中被引用到,換句話說就是指定類中變數(也就是屬性的實際作用者)的值。這些屬性會在類的構造函數中用到。看過一兩個源碼就會明白,構造函數中的TypedArray其實就是屬性的數組,數組的成員會被賦給類里的成員,完成從xml的初始化。類的構造函數一般有三個,一個是Class(context),這個用於在代碼中創建一個類,所以只包含一個上下文;Class(context, attrs)和Class(context, attrs, defStyle)用於從xml創建類的情況。

styles.xml中是各個控制項的「樣式」,樣式由一個個屬性所組成。我們在編輯xml文件的時候,不同的類所能設置的屬性有共同的,也有不同的,都是由樣式來控制的。具體可以去看styles.xml這個文件的內容。

themes.xml其實也是樣式,只是適用的范圍大一點,這個我是參考網上別人的看法,自己還沒研究過。

ids.xml是公共的id,也就是對應用層可見的id,id是為了獲得xml中的對象而需要的參數,也就是Object = findViewById(R.id.id_name)中的id_name。這些值可以在代碼中用android.R.id引用到

public.xml描述的是為attr、id、drawable所指定的一個32的id值,這個值在current.xml文件中會被用到。

當我們對public.xml做了改動後,執行make update-api命令,相應的current.xml就會添加這些改動。因為這些值按類型被放在不同的段上,類型相同的必須連續存放,不指定id值的話系統會自動計算出下一個值。

添加id的方法:1)在ids.xml中添加公共id項,在public.xml中也添加相應的id項。這種辦法沒有兼容性,會與後面的版本產生沖突。

2)在ids.xml中添加公共id項,每一項前面加一行的注釋,這樣就不用在public.xml中添加相應的項了。源碼中是/** @hide */的形式,這樣current中就不會有相應的段了。

3)在自己寫的xml中,使用android:id = "@+id/id_name"的形式,就和在eclipse中一樣,搜一下會發現android源碼中也有這么用的,這樣ids.xml和public.xml都不用改,兼容性我還不確定。

上面這些希望能對大家有所幫助吧。

㈤ 什麼是android framework

說簡單點,Framework具體的工作也就是為android應用開發的開發人員提供了一系列的服務和API的介面。
能夠從源碼下載到編譯,到移植進開發板都能順利的完成" 你的這些經驗挺符合要求的啊,招聘信息里寫的"Android Framework"指的應該就是/frameworks/base,多數是java代碼。看樣子他們是在做Android設備,廠商一般是做移植,然後根據自己產品的特點可能會在frameworks及整個平台里加自己的擴展功能。
http://blog.csdn.net/coding_or_coded/article/details/6822029

㈥ Android中使用 framework.jar 的方法

開發過程中遇到,要調用系統@hide的方法,這個要使用framework.jar

要把它改成

這樣個provided 的作用是我們只需要編譯成功,不需要把這個包打到apk中。

放到allprojects中是要作用到所有的子模塊上,tasks.withType(JavaCompile) 是在 javac 的 task 中加入一個參數,就是在 Xbootclasspath 增加自己的 jar 包

這個時候有可能還會遇到這個錯誤

解決辦法

在項目上右鍵,選擇"Open Mole Setting" ,點擊「Dependences」,看到
{include=[*.jar], dir=libs},remove掉,應該就OK了

㈦ Android Framework

Android Framework包含三個內容:服務端、客戶端、linux驅動

Android Framework服務端包括兩個很重要的類:WindowManagerService (WMS)、ActivityManagerService(AMS)

客戶端包含以下類:

Linux驅動和Framework相關的主要兩個部分:畫家SurfaceFlingeer和快遞員Binder
每一個窗口都對應一個畫Surface,SF主要是把各個surface顯示到同一個屏幕,Binder則提供跨進程間的消息傳遞

從APK程序的運行過程中看各個組件都在什麼時候干什麼樣的活
ActivityThread從main()函數中就開始動起來,然後調用PrepareMainLooper()為UI線程創建一個消息快遞通道即MessageQueue()
接著創建ActivityThread對象,創建過程會創建一個消息裝卸工Handler對象和一個快遞員Binder對象,其中Binder負責接收遠程Ams的IPC調用,接收到調用後讓Handler把消息裝到消息隊列,UI線程很忙的都是非同步的從消息隊列中取出消息並執行相應的操作,比如start,stop、pause

然後UI線程讓隊列調用Looper.loop()方法進入消息循環體,進入後就會不斷的從消息隊列中讀取並處理消息

當ActivityThread接收到Ams發送start某個Activity的快遞後就會創建指定的Activity對象。Activity會先按窗戶再去按玻璃和貼窗花,所以先創建PhoneWindow->DecorView->創建相應的View或ViewGroup。創建完成後就可以讓大家欣賞了,調用WindowManager把界面顯示到屏幕上,然後創建ViewRoot,然後調用Wms提供的遠程介面添加一個窗口並顯示到屏幕上。

接下來就是用戶的操作,事件線程不斷的把消息快遞發到事件隊列中去,然後事件分發線程秘書逐個取出消息,然後調用Wms中的相應函數處理該消息。

2.UI線程是什麼?
一直在傾聽用戶的心聲,所有的處理用戶消息,以及繪制頁面的工作都在該線程中完成

㈧ Framework應用框架為什麼重要呢

對於絕大多數 Android 開發工程師來說,掌握Android Framework 一直是一個不光要熟練而且必須要精通的技能。Framework這個應用框架是Android開發中最基礎,但同時也是最重要的。Framework包含了Android IPC Binder機制、Handler消息機制、Dalvik VM進程系統、AMS、WMS和Package Manager Service等等。而這些類別里又包含很多小類,有許多的分支,每一個小類里還有很多小細節,這些都是Android開發工程師必須熟練掌握和精通的技能。
如果做成一個框架圖的話,就是下面這樣的:這只是一個簡單的框架圖,其實還有很多分支

很多大廠公司在面試的時候都會有很多的技術面試題,這是考察程序員必不可少的題目。
比方說:

1.Android中多進程通信的方式有哪些?
2.進程通信你用過哪些?原理是什麼?(位元組跳動、小米)
3.描述下Binder機制原理?(東方頭條)
4.Binder線程池的工作過程是什麼樣?(東方頭條)
5.Handler怎麼進行線程通信,原理是什麼?(東方頭條)
6.Handler如果沒有消息處理是阻塞的還是非阻塞的?(位元組跳動、小米)
7.handler.post(Runnable) runnable是如何執行的?(位元組跳動、小米)
8.handler的Callback和handlemessage都存在,但callback返回true handleMessage還會執行么?(位元組跳動、小米)
9.Handler的sendMessage和postDelay的區別?(位元組跳動)
10.IdleHandler是什麼?怎麼使用,能解決什麼問題?
11.為什麼Looper.loop不阻塞主線程?(騰訊)
12.Looper無限循環為啥沒有ANR(B站)
13.Looper如何在子線程中創建?(位元組跳動、小米)
14.Looper、handler、線程間的關系。例如一個線程可以有幾個Looper可以對應幾個Handler?(位元組跳動、小米)
15.如何更新UI,為什麼子線程不能更新UI?(美團)
16.ThreadLocal的原理,以及在Looper是如何應用的?(位元組跳動、小米)
17.Android 有哪些存儲數據的方式?
18.SharedPreference原理,commit與apply的區別是什麼?使用時需要有哪些注意?(騰訊)
19.如何判斷一個 APP 在前台還是後台?
20.如何做應用保活?
21.一張圖片100x100在內存中的大小?(位元組跳動)
22.Intent的原理,作用,可以傳遞哪些類型的參數?
然後會再擴展到和這些知識點相關的更深層次的知識點細節,直到問的你答不上來為止,以此來探尋你的技術邊際,這樣就能更深入地了解你的技術能力。

Android Framework重要性
Android Framework 開發雖然比較偏底層,圈子窄,但是能掌握一些原理的東西,可以觸類旁通,往應用層發展也可以,接下來我們看看Framework知識有多重要。舉幾個栗子,你或許就能清楚了。

像掉幀監控,函數插裝,慢函數檢測,ANR 監控,啟動監控,都需要對 Framework 有比較深入的了解,才能知道怎麼去做監控,利用什麼機制去監控,函數插樁插到哪裡,反射調用該反射哪個類哪個方法哪個屬性……

目前大公司的app開發都要基於模塊化、層次化、組件化、控制項化的思路來設計架構,而這一切的基礎都建立在Android Framework系統框架底層原理實現之上。

Binder是Android系統中最重要的組成
Binder是什麼呢?請看下圖,圖是最能清楚明了的直觀表達的工具

優勢描述
性能:只需要一次數據拷貝,性能上僅次於共享內存
穩定性:基於C/S架構,職責明確,架構清晰,因此穩定性好
安全性:為每個App分配UID,進程的UID是鑒別進程身份的重要標志
Android IPC Binder機制包含了 :Linux預備知識、傳統的Linux中IPC通信原理、Binder IPC通信原理和Binder Java層實現,這些裡面都各有好多小分支,小細節需要仔細的去學習掌握。
騰訊高級工程師Binder面試
1.為什麼 Android 要採用 Binder 作為 IPC 機制?
2.Binder到底是什麼?
3.Binder機制是如何跨進程的?
4.一次Binder通信的基本流程是什麼樣?
5.為什麼 Activity 間傳遞對象需要序列化?
6.四大組件底層的通信機制是怎樣的?
7.AIDL 內部的實現原理是什麼?
這些都是關於Binder機制面試時會問到的點。

Handler主要用於非同步消息的處理: 有點類似輔助類,封裝了消息投遞、消息處理等介面。當發出一個消息之後,首先進入一個消息隊列,發送消息的函數即刻返回,而另外一個部分在消息隊列中逐一將消息取出,然後對消息進行處理,也就是發送消息和接收消息不是同步的處理。 這種機制通常用來處理相對耗時比較長的操作。
2、為什麼要用handler?

為什麼要用handler?不用這種機制行不行?不行!android在設計的時候,就封裝了一套消息的創建、傳遞、處理機制,如果不遵循這種機制,就沒有辦法更新UI信息,就會拋出異常信息。

在android開發中,經常會在子線程中進行一些操作,當操作完畢後會通過handler發送一些數據給主線程,通知主線程做相應的操作。探索其背後的原理:子線程handler主線程其實構成了線程模型中的經典問題生產者-消費者模型。生產者-消費者模型:生產者和消費者在同一時間段內共用同一個存儲空間,生產者往存儲空間中添加數據,消費者從存儲空間中取走數據。

㈨ Framework事件機制——手撕Android事件處理的三種方法

Android的事件處理的三種方法:

setOnClickListener,setOnLongClickListener、setOnTouchListener

注意:如果onTouchEvent方法return true,則單擊事件和長摁事件不再執行;若onLongClick方法返回true,則單擊事件不再處理。

需要定義繼承組件的類,重寫回調方法Touch方法執行時,先被Activity捕獲,DispatchTouchEvent方法處理。return false,交給上層的onTouchEvent方法處理;return super.dispatchTouchEvent(ev),則傳遞給最外層的View。

View用Dispatch方法處理,return false,由上層的onTouchEvent方法處理。如果返回super.dispatchTouchEvent(ev),則本層的onInterceptTouchEvent攔截,如果攔截true,則攔截,false不攔截,傳遞給子View的DispatchTouchEvent處理。

常用的回調方法:onKeyDown,onKeyLongPress,onKeyUp,onTouchEvent,onTrackballEvent(軌跡球事件)監聽和回調同時存在時,先調用監聽。

流程模型圖:

Event source 事件源
Event 事件
Event Listener 事件監聽器
下面我們來看一下點擊事件和觸摸事件的監聽三要素具體是那部分:

由於點擊事件比較簡單,系統已經幫我們處理了,並沒有找到具體事件是哪個。

View.OnClickListener 單擊事件監聽器必須實現的接⼝
View.OnCreateContextMenuListener 創建上下⽂菜單事件
View.OnFocusChangeListener 焦點改變事件
View.OnKeyListener 按鍵事件監聽器
View.OnLongClickListener 長按事件監聽器
View.OnTouchListener 觸摸屏事件監聽器

⾸先,事件監聽機制中由事件源,事件,事件監聽器三類對象組成。
事件監聽器處理流程:

在此以OnClickListener單擊事件為例使用intent來實現頁面的跳轉

監聽事件處理是事件源與事件監聽器分開的而基於回調的事件處理UI組件不但是事件源,而且還是事件監聽器,通過組件的相關回調方法處理對應的事件。

Ⅰ. 自定義View類,繼承自需要的View UI類。ex :自定義 MyButton按鈕類 extends 基礎Button類

Ⅱ. 復寫回調函數。ex:public boolean onTouchEvent(MotionEvent event)

每一個事件回調方法都會返回一個boolean值,①.如果返回true:表示該事件已被處理,不再繼續向外擴散,②.如果返回false:表示事件繼續向外擴散

而說到基於回調就離不開監聽機制

幾乎所有基於回調的事件處理方法都有一個boolean類型的返回值,該返回值用於表示該處理方法是否能完全處理該事件。
如果處理事件的回調方法返回true,表明該處理方法已經完全處理改事件,該事件不會傳播出去。
如果處理事件的回調方法返回false,表明該處理方法並未完全處理該事件,該事件會傳播出去。
對於基於回調的時間傳播而言,某組件上所發生的事件不僅會激發該組件上的回調方法,也會觸發該組件所在Activity的回調方法——只要事件能傳播到該Activity。

這里是在模擬器里進行的測試,這里按下鍵盤(而不是點擊),會看到 logcat 中的輸出,如下:

View類實現了KeyEvent.Callback介面中的一系列回調函數,因此,基於回調的事件處理機制通過自定義View來實現,自定義View時重寫這些事件處理方法即可。

Handler是一個消息分發對象。

Handler是Android系統提供的一套用來更新UI的機制,也是一套消息處理機制,可以通過Handler發消息,也可以通過Handler處理消息。

在下面介紹Handler機制前,首先得了解以下幾個概念:

在子線程執行完耗時操作,當Handler發送消息時,將會調用 MessageQueue.enqueueMessage ,向消息隊列中添加消息。 當通過 Looper.loop 開啟循環後,會不斷地從消息池中讀取消息,即調用 MessageQueue.next , 然後調用目標Handler(即發送該消息的Handler)的 dispatchMessage 方法傳遞消息, 然後返回到Handler所在線程,目標Handler收到消息,調用 handleMessage 方法,接收消息,處理消息。

從上面可以看出,在子線程中創建Handler之前,要調用 Looper.prepare() 方法,Handler創建後,還要調用 Looper.loop() 方法。而前面我們在主線程創建Handler卻不要這兩個步驟,因為系統幫我們做了。

初始化Looper

從上可以看出,不能重復創建Looper,每個線程只能創建一個。創建Looper,並保存在 ThreadLocal 。其中ThreadLocal是線程本地存儲區(Thread Local Storage,簡稱TLS),每個線程都有自己的私有的本地存儲區域,不同線程之間彼此不能訪問對方的TLS區域。

開啟Looper

發送消息

post方法:

send方法:

在子線程中,進行耗時操作,執行完操作後,發送消息,通知主線程更新UI。

本文講解了三個方面;Android事件機制;基於監聽、基於回調以及Handler消息處理。還有許多沒有講解到的知識點,我總結在了整理的一套Android進階筆記裡面;需要學習進階的同學可以前往獲取: Frame Work源碼解析手冊 、 Android核心技術進階手冊、實戰筆記、面試題綱資料

㈩ android手機裡面的framework文件夾

anim是存放動畫特效之類的倫理來說全android手機都通用。替換方法,你解壓你喜歡的特效 用winrar打開提取出來的主題,只打開不要解壓,然後按路徑把特效拖到對應的文件夾。ok
drawable文件夾裡面的default_wallpaper.jpg 就是主題默認背背景。
(准備好一張960*540的jpg圖片,改名為default_wallpaper。用winrar打開提取出來的主題,只打開不要解壓。放到res/drawable里)
drawable-mdpi文件夾, (主要是修改這里 主題相關的都在這里)
3.修改主題 (這里是最繁瑣的)
電池、信號、通知欄、對話框什麼的都在裡面修改
電池:stat_sys_battery_0.png-sta到sys_battery_unknown.png都是電池
信號:stat_sys_signal_0.png到stat_sys_signal_null.png都是信號狀態欄:status_bar_background.9.png 這個在SystemUI.apk里
去黑線:title_bar_shadow.9.png要屏幕透明的修改這個去黑白線
下拉菜單:status_bar_background.png和status_bar_background_cust.png
下拉棒:status_bar_background.png和status_bar_background_cust.png
通知欄:status_bar_item_app_background_normal.9.png和status_bar_item_background_normal.9.png
通知欄中國電信:status_bar_header_background.9.png
通知欄正在進行:title_bar_portrait.9.png
菜單設置條:activity_title_bar.9.png
二級菜單設置條:dark_header.9.png
其他的都自己找吧,很容易找的 實在找不到就一張張圖放大吧!
只要不解壓,修改過的framework-res.apk都能安全的使用。不用簽名!

去系統里所有小橫線教程divider開頭的文件圖標
divider_vertical_dark_opaque.9.png
divider_vertical_dark.9.png

divider_vertical_bright_opaque.9.png
divider_vertical_bright.9.png

divider_horizontal_textfield.9.png
divider_horizontal_dim_dark.9.png
divider_horizontal_dark_opaque.9.png
divider_horizontal_dark.9.png
divider_horizontal_bright_opaque.9.png
divider_horizontal_bright.9.png
dialog_divider_horizontal_light.9.png

熱點內容
粉土壓縮模量 發布:2024-05-02 07:53:59 瀏覽:805
國都證券初始密碼是多少 發布:2024-05-02 07:46:39 瀏覽:109
shell腳本和linux命令行 發布:2024-05-02 07:37:54 瀏覽:968
自己的伺服器搭建微信小程序商城 發布:2024-05-02 07:36:26 瀏覽:426
php單行注釋 發布:2024-05-02 07:36:22 瀏覽:958
買車哪些配置必備 發布:2024-05-02 07:30:20 瀏覽:52
華為手機的自帶鈴聲文件夾 發布:2024-05-02 07:20:14 瀏覽:501
xp系統開機密碼怎麼設置 發布:2024-05-02 06:49:48 瀏覽:759
柱加密區公式 發布:2024-05-02 06:40:19 瀏覽:4
java位元組轉換 發布:2024-05-02 06:40:11 瀏覽:687