Android:如果没有提供扩展,是否可以检查文件是否为apk文件

时间:2017-01-22 22:46:15

标签: android file apk file-extension

我正在编写一个将文件上传到另一台设备的应用程序。我必须限制如何将文件类型共享给另一个设备。我可以检查文件扩展名,但有一种更安全的方法来检查文件是否是apk。

3 个答案:

答案 0 :(得分:3)

是的,你可以。 android apk文件是zip archive

因此,您可以检查该文件是否为zip文件,并确认存在classes.dexAndroidManifest.xml文件。

答案 1 :(得分:1)

考虑到 Passer by 的想法,这里有一个检查文件是否是有效APK的方法

       public static boolean isAPK(File file) {
            FileInputStream fis = null;
            ZipInputStream zipIs = null;
            ZipEntry zEntry = null;
            String dexFile = "classes.dex";
            String manifestFile = "AndroidManifest.xml";
            boolean hasDex = false;
            boolean hasManifest = false;

            try {
                fis = new FileInputStream(file);
                zipIs = new ZipInputStream(new BufferedInputStream(fis));
                while ((zEntry = zipIs.getNextEntry()) != null) {
                    if (zEntry.getName().equalsIgnoreCase(dexFile)) {
                        hasDex = true;
                    } else if (zEntry.getName().equalsIgnoreCase(manifestFile)) {
                        hasManifest = true;
                    }
                    if (hasDex && hasManifest) {
                        zipIs.close();
                        fis.close();
                        return true;
                    }
                }
                zipIs.close();
                fis.close();
            } catch (FileNotFoundException e) {
                return false;
            } catch (IOException e) {
                return false;
            }
            return false;
        }

答案 2 :(得分:0)

可以做这个课程:

new MimeTypeMap()

根据Android文档应该给出正确的结果:

Two-way map that maps MIME-types to file extensions and vice versa.