java—如何获取存储在android设备外部存储器中的.apk文件详细信息(如:名称、id、vercode..etc)

l7mqbcuq  于 2021-07-13  发布在  Java
关注(0)|答案(5)|浏览(335)

如何获取存储在目录(如:/storage/emulated/0/downloads)中的.apk文件的详细信息(如:名称、包名、vercode..etc),即使这些文件未安装在设备上。
例如,1mobile market可以获取存储在设备中的所有.apk文件,并要求您安装它们。
如屏幕截图所示,这些应用程序没有安装在我的设备上,但市场可以加载图标、名称、版本和大小。怎样?!

5uzkadbs

5uzkadbs1#

您可以使用包管理器获取apk文件的详细信息:
只需查看以下文档链接:here

public PackageInfo getPackageArchiveInfo (String archiveFilePath, int flags)
r55awzrz

r55awzrz2#

实际上apk文件 zip archives ,您可以将文件重命名为 yourAppName.apk.zip 并使用任何zip实用程序(如7zip)将其解压缩。
这个 androidmanifest.xml 文件和资源将被提取,然后你会发现所有这些信息。。。
注意:源代码不在包中-只是编译的.dex文件(“dalvik可执行文件”)

crcmnpdw

crcmnpdw3#

apk文件实际上只是一个具有不同名称的zip存档。重命名 x.apkx.zip ,其中x是文件名,您可以使用任何zip工具打开它。这真的取决于什么信息,你在寻找至于你是否能找到它在apk文件。我可以说你可以进入 AndroidManifest.xml 文件,其中有关应用程序等的访问权限的关键信息以相当可读的形式存储。

lsmepo6l

lsmepo6l4#

你可以使用“aapt转储徽章”,它会给你的申请细节

Process p;
                    try {
                        p = Runtime.getRuntime().exec(aapt dump badging <APK_FILE NAME>);
                        p.waitFor();
                        final BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
                        String line = "";
                        while ((line = reader.readLine()) != null) {
                            output.append(line);
                            break;
                        }
                        logger.info("Output : " + output);
                    } catch (final Exception e) {
                        e.printStackTrace();
                    }
                    final String[] outputSplit = output.toString().split("'");
                    for (int i = 0; i < outputSplit.length; i++) {
                        switch (i) {
                        case 1:
                            packagename = outputSplit[i];
                            logger.info("Package : " + packagename);
                        break;
                        case 3:
                            mversionId = outputSplit[i];
                            logger.info("Version Code : " + mversionId);
                        break;
                        case 5:
                            versionId = outputSplit[i];
                            logger.info("Version Name : " + versionId);
                        break;
                        }
                    }

希望它能奏效。

pvcm50d1

pvcm50d15#

他们只是在解析googleplay商店的页面细节。

相关问题