Есть ли способ получить имя приложения, версию приложения и значок приложения для пакета, который еще не установлен? (для некоторого файла apk на sdcard)
Получить значок файла apk, версию, имя
Ответ 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