2016-04-11 24 views
1

Uygulamamın boyutunu Java kullanarak almaya çalışıyorum.Android için Paket İstatistikleri

PackageStats packageStats = new PackageStats("com.tsepak.supplierchat.debug"); 


    LoggerDebug.d(TAG, String.valueOf(packageStats.externalCodeSize)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.externalDataSize)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.externalCacheSize)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.externalMediaSize)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.externalObbSize)); 

    LoggerDebug.d(TAG, "External finished"); 

    LoggerDebug.d(TAG, String.valueOf(packageStats.cacheSize)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.codeSize)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.dataSize)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.packageName)); 
    LoggerDebug.d(TAG, String.valueOf(packageStats.describeContents())) 

bu koda çıkışını edilir:

PackageStats{20bc99f7 com.tsepak.supplierchat.debug} 
0 
0 
0 
0 
0 
External finished 
0 
0 
0 
0 

Nerede yanlış burada gidiyorum şöyle Ben kodudur? Paket büyüklüğünü elde edemiyorum. Bu satırlar, bir parçanın içinde onViewCreated() yönteminin içinde bulunur.

cevap

0

Ne yazık ki uygulama paketleri hakkında boyut bilgileri almak için genel bir API bulunmamaktadır. Bununla birlikte, geçmişte yazdığım bir teknik üzerine inşa ederek, Paket Yöneticisi'nin gizli getPackageSize yöntemini kullanarak önbellek, kod ve veri boyutu bilgilerini içeren bir PackageStats örneği alabiliriz.

İlk GET_PACKAGE_SIZE iznine ihtiyacınız olacak tüm uygulama:

<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/> 

ADT bizim projeye alakalı AIDLs (PackageStats ve IPackageStatsObserver) ithal ve ADT koçanları üretmek olabilir kullanma.

PackageManager pm = getPackageManager(); 

Method getPackageSizeInfo = pm.getClass().getMethod(
    "getPackageSizeInfo", String.class, IPackageStatsObserver.class); 

getPackageSizeInfo.invoke(pm, "com.android.mms", new IPackageStatsObserver.Stub() { 

     @Override 
     public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) 
      throws RemoteException { 

      Log.i(TAG, "codeSize: " + pStats.codeSize); 
     } 
    }); 

bu açıkça bir eksik parçası etrafında çalışmak için büyük bir kesmek işe yararken: taslakları oluşturulan ise yalnızca gizli getPackageSize yöntemini çağırın ve saplama en onGetStatsCompleted geri arama yönteminde PackageStats örneğini almak için yansıma kullanabilirsiniz Android API'sı. SDK'ya ulaşmak, özellikle kamu uygulamaları için asla iyi bir fikir değildir.

Bilgileri from: http://www-jo.se/f.pfleger/android-package-size

İlgili konular