android2.3源碼里單獨導入單個系統應用模塊的方法
對於從android的源碼網上下載下源碼的朋友,非常期待查看源碼的具體結構或特定的應用的具體實現,下面就教大家如何把系統應用導入到eclipse里開發。
一: 開發前的准備工作:1.配置Linux環境和編譯源碼的一些工具,確保編譯成功,啟動模擬器檢驗。
2.把編譯完的整個工程復制到windows系統特定目錄里。
二: 以系統應用Settings為例:
導入過程:
1.創建android工程
系統的應用都在 源碼/packages/apps/下
在eclipse里:(file->new android->create project from existing source.給工程命令,選擇工程所在目錄,選擇build target)選擇你需要的應用,選擇特定SDK版本 :
2.加載所需要的jar包
因為單獨拿出來的系統應用,缺少特定jar包的支持,需要創建libraries,把需要的jar加載進去即可。具體需要哪些jar包,可以再工程錯誤里查看少那些類或接口,借助Souce Insight工具,查找類或接口所在的位置,篩選路徑 /out/target/.......
在eclipse創建libraries的過程:
1.進入project->property->java build path->libraries,選擇Add library->user library->new,建立一個獨立的庫文件集,可命名為android-framework(名字無所謂)。
2.建立成功后選擇android-framework,然后點Add jars,添加模塊需要的jar包:
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/frameworks-core-util-lib_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/classes.jar
3.另外還要根據實際項目情況添加其他jar文件
4.記得把創建的libraries順序放在最前面。
工程->Build Path->Configure Build path ->Order and Export 選擇新建的jar,點擊up鍵,把它升到最上面。
3.修改包名
必須修改app項目中所有包的名字,如com.android.settings必須都改為com.lyg.settings(包名順便起),因為這樣才能避免最后生成的apk與系統默認的setting沖突。修改方法如下:
選擇對應的包,如com.android.settings,按F2出現修改對話框,勾選全部選項,修改完成后點preview。
需要注意的地方:
1.修改工程名后,AndroidMainfese.xml修改不很成功,最好備份一份原來的 AndroidMainfest.xml文件
2.gen下面的資源包名已經變了,由於類里的資源文件還是以前的,所以再在資源文件這里把包名改回去,在改到你修改的名字例如你把包名 com.android.settings 修改成 com.lyg.settings
由於以前的資源文件是 com.android.settings.R 所以它沒有變。而gen下的資源包名已經改變,先把它修改為com.android.setting,在改回到com.lyg.settings即可
4.其它操作
需要注釋掉進程的訪問權限,如果光有聲明,而沒有具體的實現該權限,apk是安裝不上的,暫時注釋掉,會有一些功能受到影響。解決辦法需要數子簽名,詳見數字簽名介紹。
<!-- android:sharedUserId="android.uid.system" -->
此時運行即可,對應沒有權限的加上,出現別的簡單的錯誤,自己上網查找解決。最后運行該工程,就可以修改和實現系統應用了。
說明:android的4.0源碼和android的2.3的源碼還是有區別的,用上面方法也是可以的,注意的是:android的2.3源碼可以和eclipse的工作空間在同一個目錄里,但android的4.0就不可,不然會報錯: [2012-03-19 14:38:12 - Setting] AndroidManifest.xml file missing!
