获取包的信息的方式大体相同,只是从已安装程序获取和从apk安装包中获取有细微区别,直接上代码
# 从安装包获取
public static PackageInfo getPkgInfoFromPath(Context ctx, File file) {
if (!file.exists()) {
return null;
}
String path = file.getAbsolutePath().toLowerCase().trim();
if (TextUtils.isEmpty(path)) {
return null;
} else if (!path.endsWith(".apk")) {
Log.e(TAG, "apk file path is invalid, path:" + path);
return null;
}
PackageManager pm = ctx.getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);
packageInfo.applicationInfo.sourceDir = path;
packageInfo.applicationInfo.publicSourceDir = path;
} catch (Exception e) {
e.printStackTrace();
}
return packageInfo;
}
#根据包名取
public static PackageInfo getPkgInfo (Context ctx, String pkgname){
PackageManager pm = ctx.getPackageManager();
try {
PackageInfo packageInfo = pm.getPackageInfo(pkgname, 0);
return packageInfo;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return null;
}