package com.duguang.baseanimation.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; import android.os.Environment; import android.util.Log; import android.widget.Toast; /** * 获取apk信息 * @author zhangzhp * */ public class ApkInfoTool { private static final String tag = null; /** * * @param context * Context上下文 * @param apkPath * apk在SD中的路径 * @return */ public static Drawable getApkIcon(Context context, String apkPath) { PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES); if (info != null) { ApplicationInfo appInfo = info.applicationInfo; appInfo.sourceDir = apkPath; return appInfo.loadIcon(pm); } return null; } /** * 获取apk的VersionName * * @param context * @return */ public static String getVersionName(Context context) { PackageManager pm = context.getPackageManager(); try { PackageInfo packinfo = pm.getPackageInfo(context.getPackageName(), 0); return packinfo.versionName; } catch (NameNotFoundException e) { e.printStackTrace(); // todo: can't reach return ""; } } /** * 获取apk的VersionCode * * @param context * @return */ public static int getVersionCode(Context context) { PackageManager pm = context.getPackageManager(); try { PackageInfo packinfo = pm.getPackageInfo(context.getPackageName(), 0); return packinfo.versionCode; } catch (NameNotFoundException e) { e.printStackTrace(); return 0; } } /** * 备份data/app目录下本程序的apk安装文件到SD卡根目录下 * @param packageName * @param mActivity * @throws IOException */ public static void backupApp(String packageName, Activity mActivity) throws IOException { // 存放位置 String newFile = Environment.getExternalStorageDirectory() .getAbsolutePath() + File.separator; String oldFile = null; try { // 原始位置 oldFile = mActivity.getPackageManager().getApplicationInfo( packageName, 0).sourceDir; } catch (NameNotFoundException e) { e.printStackTrace(); } System.out.println(newFile); System.out.println(oldFile); File in = new File(oldFile); File out = new File(newFile + packageName + ".apk"); if (!out.exists()) { out.createNewFile(); Log.i(tag, "文件备份成功!" + "存放于" + newFile + "目录下"); } else { Log.i(tag, "文件备份成功!" + "存放于" + newFile + "目录下"); } FileInputStream fis = new FileInputStream(in); FileOutputStream fos = new FileOutputStream(out); int count; // 文件太大的话,我觉得需要修改 byte[] buffer = new byte[256 * 1024]; while ((count = fis.read(buffer)) > 0) { fos.write(buffer, 0, count); } fis.close(); fos.flush(); fos.close(); } }