Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android工程中怎樣使用隱藏API

Android工程中怎樣使用隱藏API

編輯:關於Android編程

使用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, 但又了上面這個方法, 我們可以使用了 //apk包的文件路徑
String apkPath =
\"/sdcard/qq.apk\";
//這是一個Package 解釋器, 是隱藏的
//構造函數的參數只有一個, apk文件的路徑
PackageParser packageParser =
new PackageParser(apkPath);
//這個是與顯示有關的, 裡面涉及到一些像素顯示等等, 我們使用默認的情況
DisplayMetrics metrics =
new DisplayMetrics();
metrics.setToDefaults();
//這裡就是解析了, 四個參數,
//源文件File,
//目的文件路徑
//顯示, DisplayMetrics metrics
//flags
PackageParser.Package mPkgInfo = packageParser.parsePackage(new File(apkPath),
apkPath, metrics, 0);

//應用程序信息包, 這個公開的, 不過有些函數, 變量沒公開
ApplicationInfo info = mPkgInfo.applicationInfo;

//Resources 是用來獲取資源的 , 而這裡獲取的資源是在本程序之外的
Resources pRes = getResources();
AssetManager assmgr =
new AssetManager();
assmgr.addAssetPath(apkPath);//這個方法是隱藏的,若非調用隱藏API,要反射才能調用
Resources res =
new Resources(assmgr, pRes.getDisplayMetrics(), pRes.getConfiguration());

CharSequence label =
null;
if (info.labelRes !=
0) {
try {
label = res.getText(info.labelRes);
} catch (Resources.NotFoundException e) {
}
}
if (label ==
null) {
label = (info.nonLocalizedLabel !=
null) ?
info.nonLocalizedLabel : info.packageName;
}


//這裡就是讀取一個apk程序的圖標

if (info.icon !=
0){
Drawable icon = res.getDrawable(info.icon);
ImageView image = (ImageView) findViewById(R.id.iv_test);
image.setVisibility(View.VISIBLE);
image.setImageDrawable(icon);
}
}

=============================================

ps:通過使用隱藏API,避免了反射調用的麻煩。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved