android使用隱藏api的方法(使用被@hide的api)


http://blog.sina.com.cn/s/blog_5da93c8f0101e1yj.html

這篇文章主要要介紹的就是通過導入全編譯的classes.jar包,來實現對隱藏API的使用。這種方法實現簡單,程序員編程也簡單,就像是那些隱藏的API在SDK中變得可見了一樣。它的缺點就是兼容性問題,希望使用者引起重視,在使用時考慮清楚。

方法二:添加framework 編譯出來的classes.jar文件到eclipsebuild 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,在eclipseAndroid項目中,選擇項目屬性->Java Build Path->Libraries->Add Library->User Library->Next-> UserLibraries進入到User Libraries管理界面,點擊New新建一個User Library,比如android_framework,點擊Add JarsJar包加入到建立的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是沒有具體方法的實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM