2016-04-11 21 views
1

私はJavaを使用してアプリケーションのサイズを取得しようとしています。次のように私が持っているコードは次のとおりです。パッケージ統計情報

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())) 

このコードの出力は次のようになります。私はここで間違っているつもりです

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

?私はパッケージのサイズを取得するように見えることはできません。これらの行は、フラグメント内のonViewCreated()メソッド内にあります。

答えて

0

現在のところ、アプリケーションパッケージに関するサイズ情報を取得するためのパブリックAPIはありません。しかし、私が過去に書いた手法をベースに、PackageManagerのhidden getPackageSizeメソッドを使用して、キャッシュ、コード、データサイズ情報を含むPackageStatsのインスタンスを取得することができます。

すべての我々のアプリケーションの第一は、GET_PACKAGE_SIZEの許可が必要となります。

ADTを使用して
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/> 

私たちは私たちのプロジェクトに関連するAIDLs(PackageStatsとIPackageStatsObserver)をインポートし、ADTは、スタブを生成することができます。これは、明らかに不足している部分を回避するためには大きなハックで動作しますが

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); 
     } 
    }); 

:スタブを生成して、我々は単純に隠されたgetPackageSizeメソッドを呼び出し、スタブのonGetStatsCompletedコールバックメソッドでPackageStatsインスタンスを取得するためにリフレクションを使用することができますAndroid APIの特に公開アプリケーションの場合は、SDKを使いすぎることは避けましょう。

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

関連する問題