2015-04-27 5 views
2

Я пытаюсь выяснить, как получить имя исходного файла .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.

+0

Что заставляет вас думать, что файл все еще существует и находится в месте, которое читается вашим приложением, для каждого возможного пути установки? – CommonsWare

+0

Ну, вот что мне интересно - если существует условие для определения имени исходного файла .apk. Возможно, даже если исходный .apk-файл был удален, процесс установки запомнит имя исходного .apk-файла, который затем доступен из приложения; это то, что я пытаюсь определить. – Willis

+0

Во-первых, я не знаю, что эта информация записана. Во-вторых, в общем случае нет требования, чтобы файл APK, используемый для установки, имел распознаваемое имя файла. Просто потому, что * вы * назвали файл 'TestApp_JohnDoe.apk', не означает, что * почтовый клиент * назовет его« TestApp_JohnDoe.apk », когда он временно создает копию на внешнем хранилище для краткого использования во время установки. Поместите свои идентификаторы * в приложение *, будь то скомпилированные в (см. Ответ Бояна), упакованные в 'assets /' и т. Д. – CommonsWare

ответ

0

Можно позволить приложению знать имя АПК, который был установлен во время компиляции, если это какой-либо пользы вам

applicationVariants.all { variant -> 
    // Change the target apk file name and path 
    String apk_path = "$rootProject.projectDir/bin" 
    String apk_name = "john_doe.apk" 
    project.delete(project.apk_path) //Delete any remains 
    String apkFile = String.format("%s/%s", apk_path, apk_name) 
    variant.outputs[0].outputFile = new File(apkFile) 
    // This can be used in Java runtime by using getString(R.string.apk_name) 
    resValue "string", "apk_name", apk_name 
} 

Но то, что вы просите, я уверен, что это не возможно

Смежные вопросы