Android獲取應用大小
最近在搭建兼容性性能平台,目前架構圖還是內部才能夠看到,具體之後做完我會開放出來。
其中一個就是需要去獲取Android應用的大小,我們現在自身的apk還是會做的盡量小,但是用了一段時間之後apk的佔用量就會越來越大,自然這個也是性能測試需要監控的數據之一。在這裡我們用到了如下的:
核心代碼:
public class PkgSizeObserver extends IPackageStatsObserver.Stub {nn @Overriden public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)n throws RemoteException {n // TODO Auto-generated method stubn cachesize = pStats.cacheSize;n datasize = pStats.dataSize;n codesize = pStats.codeSize;n totalsize = cachesize + datasize + codesize;n Log.i(TAG, "cachesize--->" + cachesize + " datasize---->"n + datasize + " codeSize---->" + codesize);n }n }n
以及
public void queryPacakgeSize(String pkgName) throws Exception {n if (pkgName != null) {n PackageManager pm = getPackageManager();n try {n Method getPackageSizeInfo = pm.getClass().getDeclaredMethod(n "getPackageSizeInfo", String.class, n IPackageStatsObserver.class);nn getPackageSizeInfo.invoke(pm, pkgName,n , new PkgSizeObserver());n } catch (Exception ex) {n Log.e(TAG, "NoSuchMethodException");n ex.printStackTrace();n throw ex;n }n }n }n
接著就發現一個問題,2.3的版本的確可以用。但是4.2以及以上版本就報錯了。經過調查發現 PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)不可用,改為PackageManager.getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer)。
所以我們代碼需要做如下的修改:
public void queryPacakgeSize(String pkgName) throws Exception {n if (pkgName != null) {n PackageManager pm = getPackageManager();n try {n Method getPackageSizeInfo = pm.getClass().getDeclaredMethod(n- "getPackageSizeInfo", String.class, n+ "getPackageSizeInfo", String.class, int.class,n IPackageStatsObserver.class);nn getPackageSizeInfo.invoke(pm, pkgName,n- , new PkgSizeObserver());n+ Process.myUid() / 100000, new PkgSizeObserver());nn } catch (Exception ex) {n Log.e(TAG, "NoSuchMethodException");n ex.printStackTrace();n throw ex;n }n }n }n
然後我install到了Nexus5 Android5.0上面,點擊一個應用之後看到如下Log,說明成功了~~~
這個會作為我監聽apk中的一個模塊存在~~~推薦閱讀:
※Groovy 的現狀見解
※Android Studio 簡單配置多渠道包案例
※Atomic Red Team:針對安防設計的新型自動化測試框架
※如何使用MATLAB寫測試(6): 用Tag分類你的測試
※Android手工測試獲取代碼覆蓋率解決方案