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

Posted

技术标签:

【中文标题】如何获取 .apk 文件详细信息(如:名称、id、vercode ..etc)存储在 android 设备的外部存储中【英文标题】:How to get .apk files details (like: name, id, vercode ..etc) stored in external storage of android device 【发布时间】:2015-04-28 11:59:00 【问题描述】:

我怎样才能获得 .apk 文件 详细信息(如:名称、包名、vercode ..etc)存储在目录(如:/storage/emulated/0/downloads)中,即使它们未安装在设备上。

例如,1mobile market 可以将所有 .apk 文件存储在您的设备中并要求您安装它们。

如屏幕截图所示,那些未安装在我的设备上但市场可以加载图标、名称、版本和大小的应用程序。怎么样?!

【问题讨论】:

【参考方案1】:

您可以使用包管理器获取 apk 文件的详细信息:

只需查看以下文档链接:here

 public PackageInfo getPackageArchiveInfo (String archiveFilePath, int flags)

【讨论】:

准确而简短的回答,非常好。【参考方案2】:

实际上 apk 文件是zip archives,你可以将文件重命名为yourAppName.apk.zip 并使用任何 zip 实用程序(例如 7zip)解压。

androidmanifest.xml 文件和资源将被提取,然后您将找到所有这些信息...

注意源代码不在包中 - 只是编译后的 .dex 文件(“Dalvik Executable”)

【讨论】:

【参考方案3】:

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

【讨论】:

AndroidManifest.xml 被压缩/加密,不像你说的那样可读【参考方案4】:

您可以使用“aapt dump badging”,它会为您提供应用程序详细信息

                   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;
                        
                    

它会起作用的。

【讨论】:

【参考方案5】:

他们只是在解析 google play 商店页面的详细信息。

【讨论】:

以上是关于如何获取 .apk 文件详细信息(如:名称、id、vercode ..etc)存储在 android 设备的外部存储中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 中使用 iBeacons 获取设备详细信息,如 UUID 或设备名称

解析apk,获取apk的详细信息

解析apk,获取apk的详细信息

解析apk,获取apk的详细信息

如何为 Java 剪辑使用 ID3 标记(音频文件详细信息和信息)

通过填充 html 页面字段在运行时创建 apk 文件