Android: Как получить имя файла установщика программно?

Можно получить имя файла установщика, которое хранится на / sdcard / download /? Я хочу получить из app, имя файла apk, которое его установило. Есть простой способ сделать это, особенно с нерыночным приложением?

Лучше всего включить строку версии в манифест. Это действительно единственный надежный (и профессиональный) метод. Android не сохраняет имя файла, содержащего APK в любом месте, поэтому нет способа получить его.

Теоретически вы могли бы что-то построить с помощью FileObserver , который просматривал создание файла в определенных каталогах и каждый раз, когда файл был создан с расширением .apk вы могли бы открыть файл, извлечь манифест, найти имя пакета APK и затем сохранить это Наряду с именем файла в некотором постоянном хранилище. Затем, когда вам нужно получить информацию о версии, вы можете посмотреть в хранилище persisten, чтобы получить имя файла, соответствующее требуемому имени пакета.

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

Хм, я не уверен, что вы подразумеваете под SDCard или папкой загрузки, но вы можете получить путь apk в каталоге system / data:

командная строка:

 $ adb shell pm list packages | grep mk.trelloapp package:mk.trelloapp $ adb shell pm path mk.trelloapp package:/data/app/mk.trelloapp-1/base.apk 

Или от вас код приложения Android: (просто запустить процесс)

  Process exec = Runtime.getRuntime().exec("pm path mk.trelloapp"); exec.waitFor(); InputStream inputStream = exec.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder builder = new StringBuilder(); String line = null; while( ( line = br.readLine()) != null ) { builder.append(line); } String commandOutput = builder.toString(); 

Код выше должен просто дать вам строку, содержащую «package: /data/app/mk.trelloapp-1/base.apk»

Когда вы приобретаете путь в каталоге / данных, вы можете попытаться найти тот же (похожий) файл в других каталогах (при условии, что он не был удален), так как пакет android копируется в каталог / каталог данных при установке.