Подтвердить что ты не робот

Получить значок файла apk, версию, имя

Есть ли способ получить имя приложения, версию приложения и значок приложения для пакета, который еще не установлен? (для некоторого файла apk на sdcard)

4b9b3361

Ответ 1

Я могу получить значок, версию, имя apk с помощью getPackageArchiveInfo(archiveFilePath, flags) и getApplicationIcon (ApplicationInfo info)

Ответ 2

Я просто потратил больше часов, чем когда-либо признаю, что искал решение этого... и нашел его!:):)

После блуждания по этой ссылке: http://code.google.com/p/android/issues/detail?id=9151 Я обнаружил трюк для получения значка и имени (метки, то есть) из .apk файлов, которые НЕ БЫЛИ УСТАНОВЛЕНЫ.

Я надеюсь, что еще не поздно помочь другим в этом:

 String APKFilePath = "mnt/sdcard/myapkfile.apk"; //For example...
 PackageManager pm = getPackageManager();
 PackageInfo    pi = pm.getPackageArchiveInfo(APKFilePath, 0);

 // the secret are these two lines....
 pi.applicationInfo.sourceDir       = APKFilePath;
 pi.applicationInfo.publicSourceDir = APKFilePath;
 //

 Drawable APKicon = pi.applicationInfo.loadIcon(pm);
 String   AppName = (String)pi.applicationInfo.loadLabel(pm);

После легкого тестирования это, похоже, работает... whew.

Ответ 3

Я пробовал:

PackageInfo info = getPackageManager().getPackageArchiveInfo(fullPath, 0);
ApplicationInfo appinfo = info.applicationInfo;
label = getPackageManager().getApplicationLabel(appinfo).toString();
img = getPackageManager().getApplicationIcon(info.packageName);

но если apk не установлен, не работает этот код

Ответ 4

// Install a known apk file from the SD-Card
// or launch it if installed. 
// -hsigmond

protected void runAppFromApkFileOnSdCard() {

        final PackageManager pm = getActivity().getPackageManager();
        String apkFileName      = "application_name.apk";
        String fullPath         = "/sdcard/"+apkFileName;
        PackageInfo packageInfo = pm.getPackageArchiveInfo(fullPath, 0);
        Intent intent           = pm.getLaunchIntentForPackage(packageInfo.packageName);

        if( intent == null ){
            File file   = new File(fullPath);
            intent      = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setDataAndType(Uri.fromFile(file),
            "application/vnd.android.package-archive");
        }
        startActivity(intent);
    }

Использование:

packageInfo.applicationInfo.['name','icon','logo'] etc.

Пример значка:

Drawable icon = packageInfo.applicationInfo.loadIcon(getActivity().getPackageManager());

Ответ 5

Как вы могли обнаружить, PackageManager будет полезен только вам, если приложение установлено.

Чтобы решить вашу проблему с получением информации без установки приложения, используйте извлечение APK, см. http://code.google.com/p/apk-extractor/downloads/detail?name=APK-Extractor-src-1.0.zip&can=2&q=

Этот проект представляет собой попытку разработать публично доступный парсер который может анализировать бинарный XML-код Android. AAPT (Android Asset Packaging Инструмент) кодирует/декодирует XML-ресурсы в собственном собственном двоичном файле Google XML-формат. Общим считается, что это общий формат WBXML и любой синтаксический анализатор, совместимый с WBXML, может проанализировать его. Но это не так.

Если вы планируете исследовать двоичный XML файл Android, моя база кода может помогите вам начать и построить сервис поверх него.

Версия 1.0 - способна анализировать Android Manifest, XML-макеты и т.д. и преобразование DEX/ODEX в класс, который может быть открыт любым де-компилятор.

его блог здесь: http://prasanta-paul.blogspot.com/2012/03/android-apk-extractor.html