Android工程中怎樣使用隱藏API

來源:互聯網
上載者:User

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, 但又了上面這個方法, 我們可以使用了 //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,避免了反射調用的麻煩。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.