2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > android 获取apk资源 【Android开发】获取已安装应用的安装文件(apk文件)

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

时间:2022-06-04 12:03:58

相关推荐

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



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

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

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

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

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

List apps = getPackageManager().getInstalledApplications(0);

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

if((applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0)

{

//非系统应用

}

else

{

//系统应用

}

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

//这个属性指定了apk的路径(如:/data/app/bassy.hair.main-1.apk)

ApplicationInfo.sourceDir

//一般来说,这两个属性的值和上面的属性的值相同

ApplicationInfo.publicSourceDir

ApplicationInfo.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 getAppInfo()

{

List apps = getPackageManager().getInstalledApplications(

PackageManager.GET_SIGNATURES);

ArrayList infos = new ArrayList();

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;

}

参考资料:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。