2011年5月14日土曜日

アプリケーションが android:largeHeap=”true”指定されているかどうか確認する


ApplicationInfoの情報


AndroidManifest.xmlに情報を記述するってことは、その情報はApplicationInfoに格納されることは容易に想像がつくと思います。

デベロッパーサイトのApplicationInfoに以下の記載がありました。

public static final int FLAG_LARGE_HEAP

Since: API Level 11

Value for flags: true when the application has requested a large heap for its processes. Corresponds to android:largeHeap.

Constant Value: 1048576 (0x00100000)


ApplicationInfoのpublicメンバー、「flags」のフラグをチェックすれば判断できるってことですね。



MOTOROLA XOOMのインストールアプリを確認


以下のようにインストールアプリの情報を取得して、FLAG_LARGE_HEAPのフラグが立っているアプリのみログ出力してみました。

PackageManager pm = getPackageManager();
if(pm != null){
    List<PackageInfo> package_list = pm.getInstalledPackages(
                    PackageManager.GET_UNINSTALLED_PACKAGES );
    for (PackageInfo info : package_list){
        if(info.applicationInfo != null){
            if((info.applicationInfo.flags & ApplicationInfo.FLAG_LARGE_HEAP) != 0){
                Log.e("FLAG_LARGE_HEAP", info.packageName);
            }
        }
    }
}


結果は以下のアプリでした。

05-15 04:25:42.530: ERROR/FLAG_LARGE_HEAP(7592): com.android.launcher

05-15 04:25:42.530: ERROR/FLAG_LARGE_HEAP(7592): com.google.android.youtube
なんとなく納得できそうなアプリ達でした。




0 件のコメント:

コメントを投稿