Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android——@hide和internal API

Android——@hide和internal API

編輯:關於Android編程

  在使用eclipse編譯android工程時,有時會碰到找不到引用的錯誤,但是在linux下又是能編譯過的。 這是因為eclipse編譯通過SDK無法訪問到com.android.internal包中的API,以及標記為@hide屬性的類和方法。 一般網上下載的android-sdk-linux安裝好之後 會在android-sdk-linux/platforms/android-17/ (我的是api 17 android 4.2)下有一個android.jar 這個android.jar移掉了com.android.internal包中所有的類,也移掉了所有標記有@hide的類,枚舉,字段和方法的。 比如 :  
package android.content.pm;  
/** 
 *  See {@link PackageManager} for documentation on most of the APIs 
 *  here. 
 *  
 *  {@hide} 
 */  
public interface IPackageManager extends android.os.IInterface  

 

  這個作為 PackageManager的實現接口 其中有很多@hide方法 比如比較實用的靜默安裝API  :    
public void installPackage(android.net.Uri packageURI, android.content.pm.IPackageInstallObserver observer, int flags, java.lang.String installerPackageName)  

 

  同樣 com.android.internal.content中的PackageHelper.java  也是無法調用的。     下面記錄一下如何制作完整的 android.jar 的方法:   1:下載源碼編譯過的,在/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates中有javalib.jar 也就是 framework.jar        或者 通過 eclipse adb 連接真機獲取 adb pull /system/framework/framework.jar   2:重命名framework.jar為framework.zip 解壓獲得 classes.dex。 使用 dex2jar 反編譯 得到 classes_dex2jar.jar(反編譯腳本 dex2jar.sh),classes_dex2jar.jar中有所有的@hide以及internal的class。   3:重命名然後解壓sdk中的android.jar,將classes_dex2jar.jar中的.class 拷貝覆蓋過去。然後再壓縮成.zip ,重命名為android.jar。   此時的android.jar 完整!   eclipse安裝的ADT會限制com.android.internal的使用,所以需要修改如下: 從eclipse中的plugins中拷貝出adt文件:com.android.ide.eclipse.adt_22.0.1.v201305230001--685705.jar(根據個人版本而定) 重命名××.zip 解壓 找到com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.class文件。 使用編輯器打開 搜索到關鍵的 internal/** , 用  “com/android/internax/**”  替換“com/android/internal/**”    將internal改成internax  只要不是internal 就行,但是字母數不變。 改好之後,壓縮,重命名回去。重啟eclipse, 至此,eclipse上就沒有限制了! 這樣做,無法保證在下一次的Android更新時,這些API不被破壞,等於你的代碼跳出了兼容圈。慎用~  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved