A. 關於學習安卓底層,懂得進
我幹了3年android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。
先說下我的入門過程:
第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。
第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。
第二步,學習linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。
第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。
第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》
第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。
第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。
第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。
第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。
最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。
我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
B. android 怎麼獲取應用安裝包的大小
網上找了一下有兩種方法:
1、直接拿到data目錄下對應的包,然後用File.length()方法獲得。然後會發現和設置里顯示的大小不同。
2、通過反射調用設置里源碼的方法獲得PackageStats類的實例。
兩種方法都不想用...
後來自己找到解決辦法:
PackageManager類有個getPackageSizeInfo方法如下:
復制代碼 代碼如下:
public abstract void getPackageSizeInfo(String packageName,
IPackageStatsObserver observer);
只是這個方法是hide的。
自己編譯一下的android2.3的Framework框架,把jar包拷出來,只需要把框架導入到library,設置在默認的android的lib之上遍可以優先使用自己編譯的框架了,其實也就是讓自己應用層能調用框架中的介面。
framework下載:點擊此處
下載好後,通過添加lib後把classes.jar添加到此lib中,如圖:
下面就是直接使用方法了。
代碼如下:
pm.getPackageSizeInfo(packageInfo.packageName,
new IPackageStatsObserver.Stub() {
public void onGetStatsCompleted(PackageStats stats,
boolean succeeded) {
Log.v("King", stats.codeSize);
Log.v("King", stats.dataSize);
Log.v("King", stats.cacheSize);
}
});
第一個參數是包名,想必大家都能拿到。
第二個參數是實現AIDL生成的JAVA介面的匿名內部類。在回調方法里即可處理程序大小數據。
stats.codeSize:應用程序大小
stats.dataSize:數據大小
stats.cacheSize:緩存大小
一般大家可能都是用listView去顯示每個應用的大小,而調用getPackageSizeInfo方法是不能立刻拿到值的,所以要和其他數據非同步顯示。
可以通過handler講數據發送出去後,然後調用Adapter的notifyDataSetChanged()方法更新顯示應用大小。
也許你還想點擊每一項可以可以直接跳轉到設置里的應用管理界面,而不自己去寫卸載、清除緩存等方法。設置源碼的方法如下,可以搬過來照樣用:
代碼如下:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,Uri.fromParts("package",包名 ,null));
// start new activity to display extended information
startActivityForResult(intent, 1);
C. Ubuntu14.04編譯Android源碼,需要有多大的磁碟空間。給Ubuntu虛擬機分配20G
不夠,系統開銷加上開發環境和編譯環境就差不多20G了,如果你再裝一些IDE工具,20G空間很緊張的。空間充足的話,建議分配80G以上。
D. Android Adb 源碼分析(一)
Android ADB源碼分析的要點如下:
ADB工具概述:
ADB源碼位置:
ADB在解決特定問題中的應用:
ADB代碼修改與編譯:
後續研究方向:
重點內容:ADB源碼位於system/core/adb目錄,ADB工具由adb client、adb service和adb daemon三部分構成,在解決特定問題時,可以通過修改adb代碼和利用後門機制來實現特定功能,同時需要建立Android編譯環境進行編譯。
E. 安卓app開源代碼在哪下 android開發源碼
Android開發源碼的獲取與使用
一、獲取Android開發源碼
官方渠道:
GitHub等代碼託管平台:
第三方鏡像站點:
二、在Eclipse中使用Android開發源碼
安裝Eclipse和ADT插件:
導入Android源碼項目:
配置構建環境:
瀏覽和修改源碼:
編譯和運行項目:
三、注意事項
通過以上步驟,你可以在Eclipse中成功獲取並使用Android開發源碼進行開發工作。
F. 安卓修改系統代碼實現多開
安卓修改系統代碼實現多開是一個復雜且需要深入理解Android系統架構和源碼的過程。
關鍵步驟包括:
准備開發環境和目標設備:
配置Ubuntu虛擬機或相應的開發環境。
安裝JDK(Java Development Kit)以支持Java代碼的編譯和運行。
准備Android源碼,這通常需要從Android開源項目(AOSP)中獲取。
修改用戶限制:
在Android源碼中,找到UserManagerService.java文件。
修改MAX_MANAGED_PROFILES欄位的值,以允許創建更多的多開用戶。例如,將其改為一個更高的數字,以支持所需數量的多開用戶。
創建及管理多用戶:
通過調用createProfile方法創建多開用戶(即多開容器)。
每個多開應用將運行在不同的用戶中,擁有獨立的數據目錄,但可能共用同一個APK文件。
需要實現用戶的管理功能,如切換用戶、刪除用戶等。
定製化安裝與卸載流程:
為多開應用定製安裝和卸載流程,以確保它們能夠正確地安裝到不同的用戶中。
這可能涉及修改Android的包管理器(Package Manager)或服務。
調整UI顯示:
修改系統UI以支持多開用戶的顯示和管理。
這可能包括添加新的用戶界面元素或修改現有的界面布局。
考慮進程間通信(IPC)機制:
Binder是Android中常用的進程間通信機制。
在多開應用中,Binder用於保持不同進程中的應用之間的通信和數據同步。
總結:安卓修改系統代碼實現多開是一個技術挑戰,需要深入理解Android系統的內部機制。由於修改系統代碼可能帶來的風險和不穩定性,建議在進行此類操作前充分備份數據,並在非生產環境中進行測試。