Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> 使用Android系統隱藏api

使用Android系統隱藏api

編輯:初級開發

前提:我們需要得到android系統源碼編譯輸出的一個文件
out\target\common\obj\Java_LIBRARIES\framework_intermediates\classes.jar
這個包裡面包含所有的系統api, 隱藏的, 公開的
添加 jar方法
右鍵功能菜單->PropertIEs->Java Build Path 
LibrarIEs選項卡
這時應該有一個列表,  如果你沒有添加過, 應該只有一項, 就是系統自帶的android SDK,  選中後,右手邊有一個刪除, 先刪除系統添加的sdk. 
點Add Library -> User Library 
選擇User Library 按鈕, 新建一個User Library 將剛才那個文件 classes.jar 和系統本身的文件都導入進來, 調整下順序,  將 classes.jar 調到前面
這樣添加了之後, 就可以使用系統隱藏的api了

使用隱藏api, 有個前提:
許多api涉及到系統權限問題, 比如 後台安裝文件 api PackageManager.installPackage 要求有安裝程序的權限, 而這個安裝程序權限不是隨便有的, 只有經ROM簽名認證的才可以使用這個權限. 雖然說可以在配置文件裡面添加這個權限, 但是悲劇的是你仍然不能擁有這個權限, 在這點上, Google做的真絕..

好了, 雖然我們不能安裝, 但用api去查看apk總該可以了吧?
Google沒有公開這個Api,  但又了上面這個方法, 我們可以使用了

  1. //apk包的文件路徑
     
  2.                 String apkPath = "/sdcard/QQ.apk";
     
  3.                 //這是一個Package 解釋器, 是隱藏的
     
  4.                 //構造函數的參數只有一個, apk文件的路徑
     
  5.                 PackageParser packageParser = new PackageParser(apkPath);
     
  6.                 //這個是與顯示有關的, 裡面涉及到一些像素顯示等等, 我們使用默認的情況
     
  7.                 DisplayMetrics metrics = new DisplayMetrics();
     
  8.                 metrics.setToDefaults();
     
  9.                 //這裡就是解析了, 四個參數, 
     
  10.                 //源文件File, 
     
  11.                 //目的文件路徑(這個我也沒搞清楚怎麼回事, 看android安裝器源碼, 用的是源文件路徑, 但名字卻是destFileName)
     
  12.                 //顯示, DisplayMetrics metrics
     
  13.                 //flags, 這個真不知道是啥
     
  14.                 PackageParser.Package mPkgInfo = packageParser.parsePackage(new File(apkPath),
     
  15.                         apkPath, metrics, 0);
     
  16.                 
     
  17.                 //應用程序信息包, 這個公開的, 不過有些函數, 變量沒公開
     
  18.                 ApplicationInfo info = mPkgInfo.applicationInfo;
     
  19.                 
     
  20.                 //Resources 是用來獲取資源的 , 而這裡獲取的資源是在本程序之外的
     
  21.                 //至於為什麼這麼弄, 我搞不懂.
     
  22.                 Resources pRes = getResources();
     
  23.                 AssetManager assmgr = new AssetManager();
     
  24.                 assmgr.addAssetPath(apkPath);
     
  25.                 Resources res = new Resources(assmgr, pRes.getDisplayMetrics(), pRes.getConfiguration());
     
  26.                 
     
  27.                 CharSequence label = null;
     
  28.                 if (info.labelRes != 0) {
     
  29.                     try {
     
  30.                         label = res.getText(info.labelRes);
     
  31.                     } catch (Resources.NotFoundException e) {
     
  32.                     }
     
  33.                 }
     
  34.                 if (label == null) {
     
  35.                     label = (info.nonLocalizedLabel != null) ?
     
  36.                             info.nonLocalizedLabel : info.packageName;
     
  37.                 }
     
  38.                 
     
  39.                 
     
  40.                 //這裡就是讀取一個apk程序的圖標
     
  41.                 if (info.icon != 0){
     
  42.                     Drawable icon = res.getDrawable(info.icon);
     
  43.                     ImageView image = (ImageView) findVIEwById(R.id.iv_test);
     
  44.                     image.setVisibility(VIEw.VISIBLE);
     
  45.                     image.setImageDrawable(icon);
     
  46.                 }
     
  47.             }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved