How can i get the apk file name and path programmatically?

后端 未结 4 1929
醉话见心
醉话见心 2020-12-18 02:55

I want to get the exact file name of a program if I already know the package name of the target apk. For instance, if I know the package name of my apk, which is com.package

4条回答
  •  萌比男神i
    2020-12-18 03:31

    /**
     * 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;
    }
    

    EDIT In defense of catch (Throwable x) in this case. At first, now it is well-known that Checked Exceptions are Evil. At second, you cannot predict what may happen in future versions of Android. There already is a trend to wrap checked exceptions into runtime exceptions and re-throw them. (And a trend to do silly things that were unthinkable in the past.) As to the children of Error, well, if the package manager cannot find the apk that is running, it is the kind of problems for which Errors are thrown. Probably the last lines could be

        } catch (Throwable x) {
            return null;
        }
    

    but I do not change working code without testing it.

提交回复
热议问题