如何以编程方式获取apk文件名和路径?

时间:2013-06-06 22:25:05

标签: android apk

如果我已经知道目标apk的包名,我想获得程序的确切文件名。例如,如果我知道我的apk的包名,即com.packagename,我该如何获得该包的确切路径和文件名?顺便说一句,我不想​​得到我的apk位置,我想要我申请的任何包名称的位置。 SystemTuner pro能够做到这一点,所以我知道它是可能的,只是不确定如何。

谢谢你们!

4 个答案:

答案 0 :(得分:4)

PackageManager.getPackageInfo()返回有关该包的信息,PackageInfo.applicationInfo字段包含有关该应用程序的所需信息。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

嗯,我想将Yuri标记为答案,但我已经知道了那些东西。所以我查看了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();
    }

再次感谢大家,让我的大脑再一次爱上StackOverflow!

答案 3 :(得分:0)

在以上答案中,需要将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();
}

Seth的答案