Android: возможно ли проверить, является ли файл apk, если расширение не указано?

Я пишу приложение, которое будет загружать файл на другое устройство. Я должен ограничить, как тип файла, чтобы поделиться с другим устройством. Я могу проверить расширение файла, но есть ли более безопасный способ проверить, является ли файл apk или нет.

3 ответа

Да, ты можешь. Android-apk файл представляет собой zip-архив.

Таким образом, вы можете проверить, является ли файл zip-файлом, и подтвердить, что classes.dex а также AndroidManifest.xml файлы существуют.

Учитывая идею 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;
        }

Можно сделать этот класс:

new MimeTypeMap()

Согласно документации Android должен дать правильный результат:

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

Другие вопросы по тегам