標籤:
http://blog.sina.com.cn/s/blog_5da93c8f0101e1yj.html
這篇文章主要要介紹的就是通過匯入全編譯的classes.jar包,來實現對隱藏API的使用。這種方法實現簡單,程式員編程也簡單,就像是那些隱藏的API在SDK中變得可見了一樣。它的缺點就是相容性問題,希望使用者引起重視,在使用時考慮清楚。
方法二:添加framework 編譯出來的classes.jar檔案到eclipse的build path
其實在編譯android的時候,我們將framework 編譯到一個臨時的jar包中了,這個jar包的路徑一般為:
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
我們只需要在linux上android原始碼目錄下使用make 命令即可產生此檔案。
由於這個jar檔案中的api 還沒有重新打包,裡面被@hide掉的api並沒有被去掉。所以我們依然能夠引用裡面被@hide的api。而sdk 中的android.jar檔案時重新打包產生的,其裡標記有@hide的api已經被去掉了。所以我們把 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 拷貝到本地pc上。然後在工程中添加此jar包。
具體方法:
1 . 拷貝linux編譯產生的 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar到本機PC。
2,在eclipse的Android項目中,選擇項目屬性->Java Build Path->Libraries->Add Library->User Library->Next-> UserLibraries進入到User Libraries管理介面,點擊New建立一個User Library,比如android_framework,點擊Add Jars把Jar包加入到建立的User Library中,最後點擊OK。
3.選擇項目屬性->Java Build Path->Order and Export,使用右面的“UP”鍵,把所建立的User Libraries移到Android SDK的上面。這樣做的意思就是優先使用classes.jar中的API,其次使用android.jar中的API。為什麼不直接使用classes.Jar?因為我在使用時發現,android.jar中有的東西classes.jar中沒有。
【實踐】
1. 第一種方式將項目代碼放置到系統原始碼當中,其能夠訪問所有的API,我一般在windows的eclisp當中建立項目,基本OK之後,將代碼 系統當中進行編譯,流程 放置路徑:pizza/package/apps/目錄,添加一個Android.mk檔案,Android.mk裡面的檔案內容
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# 根據自己項目需要apk的名稱,其他均不需要修改
LOCAL_PACKAGE_NAME:=TestRemoteSubmix
LOCAL_CERTIFICATE:=platform
include $(BUILD_PACKAGE)
2.第二種方式,也不需要去掉@hide, 也就是不需要修改android系統原始碼,直接將out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar檔案COPY出來,然後按上面的方式加入到windows的eclisp當中。
注意:它classes.jar其裡麵包含了具體方法的實現,在標準的sdk是沒有具體方法的實現
android使用隱藏api的方法(使用被@hide的api)