今天研究了一下APK管理器代码,发现还是比较简单的,主要就是两个列表,一个显示SD卡上面的APK文件的list,一个显示已经安装的app的list。
1.获取SD卡上的APK安装文件后,要用代码读出APK里面的信息,如icon等,的主要代码如下:
private void getUninatllApkInfo(Context context, String apkPath) {
String PATH_PackageParser = "android.content.pm.PackageParser";
String PATH_AssetManager = "android.content.res.AssetManager";
try {
// apk包的文件路径
// 这是一个Package 解释器, 是隐藏的
// 构造函数的参数只有一个, apk文件的路径
// PackageParser packageParser = new PackageParser(apkPath);
Class pkgParserCls = Class.forName(PATH_PackageParser);
Class[] typeArgs = new Class[1];
typeArgs[0] = String.class;
Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs);
Object[] valueArgs = new Object[1];
valueArgs[0] = apkPath;
Object pkgParser = pkgParserCt.newInstance(valueArgs);
Log.d("ANDROID_LAB", "pkgParser:" + pkgParser.toString());
// 这个是与显示有关的, 里面涉及到一些像素显示等等, 我们使用默认的情况
DisplayMetrics metrics = new DisplayMetrics();
metrics.setToDefaults();
typeArgs = new Class[4];
typeArgs[0] = File.class;
typeArgs[1] = String.class;
typeArgs[2] = DisplayMetrics.class;
typeArgs[3] = Integer.TYPE;
Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod(
"parsePackage", typeArgs);
valueArgs = new Object[4];
valueArgs[0] = new File(apkPath);
valueArgs[1] = apkPath;
valueArgs[2] = metrics;
valueArgs[3] = 0;
Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser,
valueArgs);
// 应用程序信息包, 这个公开的, 不过有些函数, 变量没公开
// ApplicationInfo info = mPkgInfo.applicationInfo;
Field appInfoFld = pkgParserPkg.getClass().getDeclaredField(
"applicationInfo");
ApplicationInfo info = (ApplicationInfo) appInfoFld
.get(pkgParserPkg);
// uid 输出为"-1",原因是未安装,系统未分配其Uid。
Log
.d("ANDROID_LAB", "pkg:" + info.packageName + " uid="
+ info.uid);
Class assetMagCls = Class.forName(PATH_AssetManager);
Constructor assetMagCt = assetMagCls.getConstructor((Class[]) null);
Object assetMag = assetMagCt.newInstance((Object[]) null);
typeArgs = new Class[1];
typeArgs[0] = String.class;
Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod(
"addAssetPath", typeArgs);
valueArgs = new Object[1];
valueArgs[0] = apkPath;
assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);
Resources res = context.getResources();
typeArgs = new Class[3];
typeArgs[0] = assetMag.getClass();
typeArgs[1] = res.getDisplayMetrics().getClass();
typeArgs[2] = res.getConfiguration().getClass();
Constructor resCt = Resources.class.getConstructor(typeArgs);
valueArgs = new Object[3];
valueArgs[0] = assetMag;
valueArgs[1] = res.getDisplayMetrics();
valueArgs[2] = res.getConfiguration();
res = (Resources) resCt.newInstance(valueArgs);
CharSequence label = null;
if (info.labelRes != 0) {
label = res.getText(info.labelRes);
}
Log.d("ANDROID_LAB", "label=" + label);
// 这里就是读取一个apk程序的图标
if (info.icon != 0) {
this.icon = res.getDrawable(info.icon);
appName = label.toString();
packageName = info.packageName;
}
} catch (Exception e) {
e.printStackTrace();
}
}
icon就是这个APK的图标,appName就是这个apk的名称,packageName就是这个apk的包名。
2.下面是如何获取所有的已经安装的非系统app的代码:
private ArrayList<InstalledAppInfo> getInstalledApps() {
ArrayList<InstalledAppInfo> res = new ArrayList<InstalledAppInfo>();
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
for (int i = 0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
if((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0){
continue;
}
InstalledAppInfo newInfo = new InstalledAppInfo();
newInfo.setAppname(p.applicationInfo.loadLabel(getPackageManager())
.toString());
newInfo.setPname(p.packageName);
newInfo.setVersionName(p.versionName);
newInfo.setVersionCode(p.versionCode);
newInfo.setIcon(p.applicationInfo.loadIcon(getPackageManager()));
res.add(newInfo);
}
return res;
}
其中的
if((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0){
continue;
}
作用是过滤掉system app。
如果需要整个Application源码的可以发邮件到bear.huangzhen@gmail.com索取。
分享到:
相关推荐
- 带文件管理器功能,支持常用的复制、重命名、删除等功能;支持安装APK文件(长按文件名); - 可以解压、压缩、替换jar/zip/apk/ear/war文件中的单个文件以及整个目录(长按文件或目录)。 - 资源分支选择功能,可...
下载提供的文档和资源,你可以跟随教程逐步实践,从而掌握自定义apk安装器的制作技巧。 【知识点详解】 1. **APK文件结构**:首先,你需要了解APK的基本组成,包括AndroidManifest.xml(应用元数据)、.dex...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库和Visual C++ (VC++) 开发一个APK安装器。APK安装器是一种应用程序,它允许用户在Android设备上方便地安装和卸载APK文件。通过学习如何制作...
总的来说,"old.apk and new.apk"涉及的知识点主要包括Android应用的版本管理、增量更新技术、补丁制作和应用、以及跨平台兼容性。理解这些概念和技术对于Android开发者来说至关重要,能够提升用户体验,同时降低...
在安卓应用开发中, APK 签名是一个关键步骤,它确保了应用的完整性和安全性。签名过程使得开发者能够对应用程序进行唯一标识,同时也保护应用免受恶意篡改。以下是关于“安卓制作apk签名”的详细知识讲解: 1. **...
在Android手机系统软件apk开发制作过程中,首先需要搭建一个完整的开发环境。这通常涉及到以下几个关键步骤: 1. **JDK安装**:Java Development Kit (JDK)是Android开发的基础,因为Android应用程序是用Java语言...
KM盒子是一款支持文字、图片、表格混合排版的安卓手机APK电子书制作软件,编辑器支持插入超文本链接和视频链接,生成的APK电子书支持同时播放音频文件实现边看边听。软件支持APK相册生成、微书刊制作、生成chm电子书...
3. **权限管理**:将Web应用打包为APK时,需要明确申请必要的Android权限,如网络访问、存储访问等。 4. **更新机制**:HTML5应用通常易于更新,但作为APK发布后,更新可能需要用户手动升级,或者通过内置的自动更新...
用户可以通过Android设备上的文件管理器找到下载的`.apk`文件,点击安装。安装过程中,系统会验证签名,确认无误后,应用将被安装到设备上。 7. **调试与优化**: 对于开发者来说,也可以创建未签名的`.apk`用于...
“AssetStudio”是提到的特定解包工具之一,它是一个开源的图形化工具,专门用于提取和管理Android游戏及应用的资源。AssetStudio能解析APK文件,显示其中的资源,包括图片、音频、3D模型等,并提供导出功能,让用户...
Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于Xposed框架可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。Xposed 框架安装器可以看成是个Xposed 框架的管理工具...
"一键提取游戏APK包音乐"是一个实用工具,专门针对那些想要轻松获取游戏背景音乐或者音效的用户。这个工具的独特之处在于它允许用户直接从APK文件中提取音乐,而不需要进行复杂的反编译或解包过程,大大简化了操作...
首先,`keytool`是Java Development Kit (JDK)自带的一个命令行工具,用于管理和创建数字证书,包括生成密钥对(公钥和私钥)以及存储这些密钥的Keystore文件。在Android应用签名的过程中,我们需要生成一个包含私钥...
在这个“手电筒项目源码和APK”中,我们有机会深入研究如何构建这样一个应用,并通过源码学习Android开发的相关知识。 首先,我们要理解Android应用的基本结构。在Android开发中,一个应用程序通常包含多个组件,如...
”以及部分提供的内容,详细介绍如何制作自己的专属APK程序。 #### 二、准备工作 在开始制作专属APK程序之前,我们需要准备一些必要的工具和环境: 1. **安装Java环境**:APK程序的开发主要基于Java语言。因此,...
这份“安卓头像制作图片圆角剪裁相关-Android拍照剪裁示例代码内附APK.rar”资源包含了一个Android应用的示例代码,用于演示如何实现这一功能。以下将详细介绍其中可能包含的关键知识点: 1. **Intent启动相机**:...
总的来说,HTML一键打包APK工具为非程序员提供了一种简单快捷地将Web内容转化为移动应用的途径,降低了Android开发的门槛,有助于快速原型制作和轻量级应用的部署。然而,对于复杂和高性能需求的项目,还是推荐采用...
2. **配置管理器**:调整项目设置,以便为每个目标平台(如Android)生成正确的输出。 3. **发布应用**:右键点击项目,选择“发布”选项,然后按照Microsoft官方文档()的指引进行操作。 4. **寻找keystore文件**...
于是利用Android自带的sqlite制作了一款小型密码管理工具。 此资源用安卓手机能直接安卓。绿色无病毒。我还没有能做病毒那么厉害哈哈 代码包在https://download.csdn.net/download/mountain_hua/10455152,下载后用...
☆文件管理器 可以查看,移动或删除您收到的文件,甚至可以在需要清理手机存储空间时制作备份副本。 ☆查看已连接的朋友的移动应用 程序成功连接后,您朋友的手机中的各种应用程序将被引入您自己的手机,只需点击...