Как прочитать манифест Android без использования PackageManager? - PullRequest
3 голосов
/ 20 декабря 2011

Я работаю над приложением Android, которое требует больше информации, чем доступно в PackageManager (например, Фильтры намерений ). Я создал парсер для чтения файла AndroidManifest, но не могу найти местоположение AndroidManifest.xml для любого установленного приложения. Код, который я использую:

int flags = PackageManager.GET_ACTIVITIES
                       //| PackageManager.GET_CONFIGURATIONS
                       //| PackageManager.GET_DISABLED_COMPONENTS
                       //| PackageManager.GET_GIDS
                       //| PackageManager.GET_INSTRUMENTATION
                       //| PackageManager.GET_INTENT_FILTERS //Not needed (see BUG: http://code.google.com/p/android/issues/detail?id=3217)
                       | PackageManager.GET_META_DATA
                       | PackageManager.GET_PERMISSIONS
                       | PackageManager.GET_PROVIDERS
                       | PackageManager.GET_RECEIVERS
                       | PackageManager.GET_RESOLVED_FILTER
                       | PackageManager.GET_SERVICES
                       | PackageManager.GET_SHARED_LIBRARY_FILES
                       | PackageManager.GET_SIGNATURES
                       | PackageManager.GET_UNINSTALLED_PACKAGES
                       | PackageManager.GET_URI_PERMISSION_PATTERNS;
final PackageInfo pkg = pm.getPackageInfo(info.packageName, flags);
File manifest = new File(pkg.applicationInfo.publicSourceDir + "/AndroidManifest.xml");
if (manifest.exists()) {
    //Code never reaches this point
}

Согласно документации, ApplicationInfo.publicSourceDir равно:

Полный путь к расположению общедоступных частей этого пакет (то есть пакет первичного ресурса и манифест). За приложения без блокировки вперед - это то же самое, что и {@link #sourceDir).

Что я делаю не так или как я могу сделать это правильно?

Ответы [ 3 ]

0 голосов
/ 20 декабря 2011

Вот код:

AssetManager am = yourContext.createPackageContext("packageName", 0).getAssets();

XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml");

но тогда вам нужно разобрать его.

0 голосов
/ 20 декабря 2011

Это заняло много времени, но я понял это.Активы, такие как манифест, сжаты - см. этот пост .Если бы он не был сжат, код, предоставленный @gwa (или что-то похожее на него), сделал бы свое дело.

0 голосов
/ 20 декабря 2011

Не думаю, что у вашего приложения достаточно прав для его чтения. Попробуйте это на рутованном устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...