PkgUtil.java 源代码


package com.x8zs.plugin.utils;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.DisplayMetrics;
import android.util.Log;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.security.MessageDigest;
import java.util.jar.JarFile;

public class PkgUtil {
    private static final String TAG = "PkgUtil";

    public static byte[] getApkCert(Context context, String str) {
        Signature[] signatureArr;
        PackageInfo packageArchiveInfo = context.getPackageManager().getPackageArchiveInfo(str, 64);
        if (packageArchiveInfo != null && (signatureArr = packageArchiveInfo.signatures) != null && signatureArr.length > 0) {
            return signatureArr[0].toByteArray();
        }
        return null;
    }

    public static String getApkCertMd5(Context context, String str) {
        try {
            return getPkgCertMd5(context.getPackageManager().getPackageArchiveInfo(str, 64));
        } catch (Throwable th) {
            th.printStackTrace();
            return "";
        }
    }

    public static PackageInfo getApkInfo(Context context, String str) {
        return context.getPackageManager().getPackageArchiveInfo(str, 0);
    }

    public static String getApkPkg(Context context, String str) {
        PackageInfo packageArchiveInfo = context.getPackageManager().getPackageArchiveInfo(str, 0);
        if (packageArchiveInfo != null) {
            return packageArchiveInfo.packageName;
        }
        return "";
    }

    public static String getAppCertMd5(Context context, String str) {
        try {
            return getPkgCertMd5(context.getPackageManager().getPackageInfo(str, 64));
        } catch (Throwable th) {
            th.printStackTrace();
            return "";
        }
    }

    public static Drawable getAppIcon(Context context, String str) {
        ApplicationInfo applicationInfo;
        PackageManager packageManager = context.getPackageManager();
        try {
            applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException unused) {
            applicationInfo = null;
        }
        if (applicationInfo == null) {
            return null;
        }
        return packageManager.getApplicationIcon(applicationInfo);
    }

    public static String getAppName(Context context, String str) {
        PackageManager packageManager = context.getPackageManager();
        try {
            return packageManager.getPackageInfo(str, 0).applicationInfo.loadLabel(packageManager).toString();
        } catch (PackageManager.NameNotFoundException unused) {
            return "";
        }
    }

    public static long getAppSize(Context context, String str) {
        try {
            return new File(context.getPackageManager().getPackageInfo(str, 0).applicationInfo.sourceDir).length();
        } catch (Throwable unused) {
            return 0L;
        }
    }

    public static int getAppVersionCode(Context context, String str) {
        try {
            return context.getPackageManager().getPackageInfo(str, 0).versionCode;
        } catch (PackageManager.NameNotFoundException unused) {
            return 0;
        }
    }

    public static String getAppVersionName(Context context, String str) {
        try {
            return context.getPackageManager().getPackageInfo(str, 0).versionName;
        } catch (PackageManager.NameNotFoundException unused) {
            return "";
        }
    }

    public static Drawable getHostAppIcon(Context context) {
        return getAppIcon(context, context.getPackageName());
    }

    public static String getHostAppName(Context context) {
        return getAppName(context, context.getPackageName());
    }

    public static long getHostAppSize(Context context) {
        return getAppSize(context, context.getPackageName());
    }

    public static int getHostVersionCode(Context context) {
        return getAppVersionCode(context, context.getPackageName());
    }

    public static String getHostVersionName(Context context) {
        return getAppVersionName(context, context.getPackageName());
    }

    public static String getManifestDigest(Context context) {
        try {
            String value = new JarFile(context.getApplicationInfo().sourceDir).getManifest().getMainAttributes().getValue("Manifest-Digest");
            if (value == null) {
                return "";
            }
            return value.toString().trim();
        } catch (Throwable th) {
            th.printStackTrace();
            return "";
        }
    }

    public static PackageInfo getPackageArchiveInfo(String str, int i6) {
        Class<?> cls;
        try {
            Class<?> cls2 = Class.forName("android.content.pm.PackageParser");
            Class<?>[] declaredClasses = cls2.getDeclaredClasses();
            int length = declaredClasses.length;
            int i7 = 0;
            while (true) {
                if (i7 < length) {
                    cls = declaredClasses[i7];
                    if (cls.getName().compareTo("android.content.pm.PackageParser$Package") == 0) {
                        break;
                    }
                    i7++;
                } else {
                    cls = null;
                    break;
                }
            }
            Constructor<?> constructor = cls2.getConstructor(String.class);
            Class<?> cls3 = Integer.TYPE;
            Method declaredMethod = cls2.getDeclaredMethod("parsePackage", File.class, String.class, DisplayMetrics.class, cls3);
            Method declaredMethod2 = cls2.getDeclaredMethod("collectCertificates", cls, cls3);
            Class<?> cls4 = Long.TYPE;
            Method declaredMethod3 = cls2.getDeclaredMethod("generatePackageInfo", cls, int[].class, cls3, cls4, cls4);
            constructor.setAccessible(true);
            declaredMethod.setAccessible(true);
            declaredMethod2.setAccessible(true);
            declaredMethod3.setAccessible(true);
            Object newInstance = constructor.newInstance(str);
            DisplayMetrics displayMetrics = new DisplayMetrics();
            displayMetrics.setToDefaults();
            Object invoke = declaredMethod.invoke(newInstance, new File(str), str, displayMetrics, 0);
            if (invoke == null) {
                return null;
            }
            if ((i6 & 64) != 0) {
                declaredMethod2.invoke(newInstance, invoke, 0);
            }
            return (PackageInfo) declaredMethod3.invoke(null, invoke, null, Integer.valueOf(i6), 0, 0);
        } catch (Exception e6) {
            Log.e(TAG, "android.content.pm.PackageParser reflection failed: " + e6.toString());
            return null;
        }
    }

    public static String getPkgCertMd5(PackageInfo packageInfo) {
        try {
            return MiscUtil.hex(MessageDigest.getInstance("MD5").digest(packageInfo.signatures[0].toByteArray()));
        } catch (Throwable th) {
            th.printStackTrace();
            return "";
        }
    }

    public static boolean isPkgInstalled(Context context, String str) {
        try {
            context.getPackageManager().getPackageInfo(str, 0);
            return true;
        } catch (Throwable unused) {
            return false;
        }
    }

    public static void openApp(Context context, String str) {
        try {
            context.startActivity(context.getPackageManager().getLaunchIntentForPackage(str));
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    public static void openAppDetailSetting(Activity activity, int i6) {
        try {
            Intent intent = new Intent();
            intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
            intent.addCategory("android.intent.category.DEFAULT");
            intent.setData(Uri.parse("package:" + activity.getPackageName()));
            intent.addFlags(268435456);
            intent.addFlags(1073741824);
            intent.addFlags(8388608);
            activity.startActivityForResult(intent, i6);
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    public static void openInstallApk(Activity activity, String str, int i6) {
        try {
            Intent intent = new Intent("android.intent.action.VIEW");
            intent.setDataAndType(Uri.fromFile(new File(str)), "application/vnd.android.package-archive");
            activity.startActivityForResult(intent, i6);
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    public static void openStorageSetting(Activity activity, int i6) {
        try {
            Intent intent = new Intent("android.settings.INTERNAL_STORAGE_SETTINGS");
            activity.startActivity(intent);
            activity.startActivityForResult(intent, i6);
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    public static void openUninstallApk(Activity activity, String str, int i6) {
        try {
            activity.startActivityForResult(new Intent("android.intent.action.DELETE", Uri.parse("package:" + str)), i6);
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    public static boolean isPkgInstalled(Context context, String str, int i6) {
        try {
            return context.getPackageManager().getPackageInfo(str, 0).versionCode >= i6;
        } catch (Throwable unused) {
            return false;
        }
    }
}