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