❶ 如何搭建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中
在Android framework中修改資源文件時,在Android 4.0之前,都是直接在sourcecode/frameworks/base/core/res/res下面添加對應的資源文件,然後編譯framework-res即可,但是這種情況到了Android 4.1就有改變了。按照以前的方法在編譯的時候卻會報錯,提示找不到引用的資源文件,一般情況下找不到資源文件有以下幾個原因: (1). 資源id寫錯了,導致清彎id不匹配; (2). 未編譯framework-res,從而導致無法找到資源文件; 比如你在framework中添加了一張圖片,但你在編蠢慎譯framework-res之前去編譯引用該資源的SystemUI,那肯定是找不到的。 (3). 未import正確的資源包; 在frameworks/base/core/res/res下編譯生成的資源文件保存在out/target/common/R/com/android/internal/R.java 可以先在該R.java內看有沒有你的資源id,然後檢查源代碼有沒有: import com.android.internal.R; (4). 沒有修改frameworks/base/core/res/res/values/public.xml; 第四點是Android 4.1才需要做的,在Android 4.1之前,我們添加一個資源文件,編譯時會自動添加到public.xml中,但到了Android 4.1卻不會了,需要手動添加,比如: 添加了一個布局文件,則需要在public.xml中添加如下代碼: <java-symbol type="layout" name="usb_storage_connection_connected" /> 添加了一個字元串,則需要在public.xml中添加如下代碼: <java-symbol type="string" name="usb_storage_connection_message" /> 答檔悶添加了一張圖片,則需要在public.xml中添加如下代碼: <java-symbol type="drawable" name="usb_storage_connected" /> 在布局文件中新增了一個控制項的id,則需要在public.xml中添加如下代碼: [html] view plain <java-symbol type="id" name="mytextView" /> 新添加的資源仿照public.xml中原有的方式加上即可。
❸ 用apktool反編譯安卓4.0的framework遇到的問題
你必須按要求將相關的framework提取到該目錄下才行
❹ 如何學習MTK 編譯android系統的framework層源碼,需要看一些什麼文檔,最近在公司需要學習、
mtk有個叫makeMtk的腳本文件,直接執行就行,後面參數加上自己要編譯的模塊,比如./makeMtk -t mm frameworks/base/core/res
❺ 如何調試跟蹤Android Framework源代碼
本文講解如何在Eclipse中導入Android源代碼(包括Framework和Application的代碼),然後通過模擬器或真機跟蹤/調試Android的Java代碼,區別於一般基於Android SDK的純應用開發,這里可以跟蹤/調試Framework中的代碼。
一、准備工作
確保機器上已經安裝並配置下列軟體環境:JDK/ Eclipse / Android SDK / ADT
即,機器上已經安裝了Eclipse下Android應用開發所需的環境。如果還未配置,移步《搭建Windows下Android應用開發環境——Eclipse/Android/ADT》。
另外,為了跟蹤調試Android源碼,你還需要有Android源碼,並有源碼的編譯環境,可以是:
虛擬機環境 虛擬機中安裝Linux,Linux下編譯Android源碼。此環境下,如果要在宿主機的Eclipse中調試,還需要把Android的源碼路徑共享出來,宿主機可訪問到;
有單獨的可編譯Android的網路環境 在你的客戶端的機器上訪問伺服器共享出來的Android的源碼路徑;
Linux環境下直接通過Eclipse跟蹤調試本機上的Android源碼。
注意:不管哪種工作方式,Android源碼要都是已經編譯過的,且編譯時採用的是Eng模式(vs User mode)。編譯Android Platform和Kernel的過程,可參考《Ubuntu10.10下編譯Android2.2平台》及《Ubuntu10.10下編譯Android2.2內核》。
二、基本設置
准備工作完畢之後,現在做一些基本的設置。
1. 把Android源碼路徑<Android_ROOT>下的developmentideeclipse中的.classpath文件復制到<Android_ROOT>下;如果需要在模擬器中進行調試的話,需要復制三個img(具體方法見http://wenku..com/view/26d9063c87c24028915fc366.html)
2. 修改Eclipse的設置
修改eclipse.ini文件,更改下列內容:
[plain]view plain
-Xms40m
-Xmx384m
改為:
[java]view plain
-Xms128m
-Xmx512m
這里增大最小Java堆大小到128MB,增大最大Java堆大小到512MB。
三、Eclipse中創建工程
1. File > New > Java Project