Я пытаюсь выяснить, как получить имя исходного файла .apk, из которого было установлено приложение. Я знаю, что вы можете получить имя пакета и исходный каталог установленного приложения, используя класс ApplicationInfo
(описанный здесь: Android: how to get the name of apk file programmatically?), но это НЕ то, что я хочу.Получение имени исходного файла .APK в Android
В качестве примера предположим, что у меня есть простое приложение, которое называется TestApp
(через тег android:label
в файле AndroidManifest.xml
). Кроме того, предположим, что я создаю файл .apk для приложения выше, переименуйте указанный .apk-файл в TestApp_JohnDoe.apk
, а затем отправьте это приложение John Doe для установки. Когда John Doe устанавливает приложение, щелкнув файл .apk, я хотел бы прочитать имя файла оригинала .apk, TestApp_JohnDoe.apk
, который я ему отправил. Используя класс ApplicationInfo
, более конкретно метод sourceDir
дает мне каталог установки и имя приложения, /data/app/TestApp.apk
, что не то, что я ищу. Я знаю, что возможно просмотреть все доступные каталоги, которые ищут оригинальный файл .apk, но я надеюсь избежать этого.
В заключение, я хотел бы извлечь программно .apk файла/источник каталог инсталлятора .apk, такие, как /storage/sdcard0/Download/TestApp_JohnDoe.apk
, в отличие от каталога .apk файла/источник фактического установленного приложения, /data/app/TestApp.apk
.
Что заставляет вас думать, что файл все еще существует и находится в месте, которое читается вашим приложением, для каждого возможного пути установки? – CommonsWare
Ну, вот что мне интересно - если существует условие для определения имени исходного файла .apk. Возможно, даже если исходный .apk-файл был удален, процесс установки запомнит имя исходного .apk-файла, который затем доступен из приложения; это то, что я пытаюсь определить. – Willis
Во-первых, я не знаю, что эта информация записана. Во-вторых, в общем случае нет требования, чтобы файл APK, используемый для установки, имел распознаваемое имя файла. Просто потому, что * вы * назвали файл 'TestApp_JohnDoe.apk', не означает, что * почтовый клиент * назовет его« TestApp_JohnDoe.apk », когда он временно создает копию на внешнем хранилище для краткого использования во время установки. Поместите свои идентификаторы * в приложение *, будь то скомпилированные в (см. Ответ Бояна), упакованные в 'assets /' и т. Д. – CommonsWare