【Android开发】获取已安装应用的安装文件(apk文件)

来源:互联网 发布:淘宝网购物精品羊毛衫 编辑:程序博客网 时间:2024/06/01 03:58



不管是“ES文件浏览器”、“QQ”等应用,它们都可以获取本机已安装的应用程序信息,还可以发送安装包(apk文件)给别人。

这两天查了一些资料,有所收获,整理一下,写在下面。



第一步:获取已安装的应用列表


应用分为两种:一种是系统自带的,另一种是用户自己安装的。

通过下面代码可以获取所有应用的信息:

List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0);

通过以下代码判断是否是应用分类:

if((applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){//非系统应用}else{//系统应用        }


第二步:获取已安装的应用对应的安装文件(apk)


//这个属性指定了apk的路径(如:/data/app/bassy.hair.main-1.apk)ApplicationInfo.sourceDir
//一般来说,这两个属性的值和上面的属性的值相同ApplicationInfo.publicSourceDirApplicationInfo.scanPublicsourceDir


默认情况下,必须要获取root权限,才能访问/data/app目录的,

如果没有root,用文件浏览器进入/data目录,会发现里面为空,并没有app文件夹

但是,有一点挺奇怪的,看下面截图


上面是adb shell工具直接查询已安装应用apk文件的属性

注意权限信息“-rw-r--r--”,这表明"/data/app/bassy.hair.main-1.apk"是可读的。

换句话说,我们可以在程序中直接访问该文件。




另外介绍ApplicationInfo的两个常用方法:

public CharSequence loadLabel(PackageManager pm)public Drawable loadIcon(PackageManager pm)


ApplicationInfo.loadLabel用于获取应用程序的名称

ApplicationInfo.loadIcon用于获取应用程序的图标



部分代码:


/** 获取已安装应用信息(不包含系统自带) */private ArrayList<AppInfo> getAppInfo(){List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(PackageManager.GET_SIGNATURES);ArrayList<AppInfo> infos = new ArrayList<AppInfo>();for (ApplicationInfo info : apps){if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0){// 非系统应用AppInfo appInfo = new AppInfo();appInfo.name = info.loadLabel(getPackageManager()).toString();appInfo.icon  = info.loadIcon(getPackageManager());appInfo.path = info.sourceDir;appInfo.packageName = info.packageName;infos.add(appInfo);}}return infos;}

public class AppInfo implements Serializable{/** 序列号 */private static final long serialVersionUID = -6660233212727684115L;/** 名称 */public String name;/** (路径) */public String path;/** 图标 */public Drawable icon;/** 包名 */public String packageName;}






参考资料:

http://www.cnblogs.com/mainroadlee/archive/2011/05/23/android_get_installed_app.html

http://blog.csdn.net/zys871228/article/details/12746831

2 0
原创粉丝点击