Как я могу получить имя и путь файла apk программно? - программирование

Как я могу получить имя и путь файла apk программно?

Я хочу получить точное имя файла программы, если я уже знаю имя пакета целевого apk. Например, если я знаю имя пакета моего apk, которое является com.packagename, как я могу получить точный путь и имя файла этого пакета? Btw, я не хочу получать только расположение MY apk, я хочу, чтобы местоположение любого имени пакета, которое я применяю. SystemTuner pro способен сделать это, поэтому я знаю, что это возможно, просто не уверен, как это сделать.

Спасибо, ребята!

4b9b3361

Ответ 2

/**
 * Get the apk path of this application.
 * @param context any context (e.g. an Activity or a Service)
 * @return full apk file path, or null if an exception happened (it should not happen)
 */
public static String getApkName(Context context) {
    String packageName = context.getPackageName();
    PackageManager pm = context.getPackageManager();
    try {
        ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
        String apk = ai.publicSourceDir;
        return apk;
    } catch (Throwable x) {
    }
    return null;
}

Ответ 3

Хорошо, я хотел бы отметить Юрия как ответ, но я уже знал об этом. Поэтому я просмотрел каждый вариант из PackageManager.ApplicationInfo и нашел .publicSourceDir

Итак, полный ответ с кодом на мой вопрос будет

PackageManager pm = getPackageManager();
    try {
        ApplicationInfo ai = pInfo.getApplicationInfo(<packageName here>, 0);
        String sourceApk = ai.publicSourceDir;
    } catch (NameNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Так что спасибо снова, ребята, снова заработали мой мозг Love StackOverflow!

Ответ 4

в ответе выше нужно изменить pInfo на pm

как это

PackageManager pm = getPackageManager();
try {
    ApplicationInfo ai = pm.getApplicationInfo(<packageName here>, 0);
    String sourceApk = ai.publicSourceDir;
} catch (NameNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

этот ответ от Сета